我正在閱讀的教科書解釋說,指針是保存另一個變量起始地址的變量,而且它們是用指向的數據類型定義的。爲什麼你可以指定一個指針作爲變量的地址呢?或者,如果省略「&」,而不是地址,如果這是指針的定義方式,它是否總是保存地址?C:指針=變量和指針=變量有什麼區別?
-6
A
回答
0
ptr
是實際的指針,而*ptr
是無論它指向什麼,所以*ptr=&var
沒有任何意義,除非它是一個指針的指針。它要麼是ptr=&var
要麼是*ptr=var
如果你真的想給一個指針指定一個變量,那麼可以通過強制轉換。這編譯,但我看不出有什麼好理由做這樣的事情:
#include <stdio.h>
main()
{
int var=4;
int *ptr;
ptr = (int *)var;
printf("%d\n", *ptr);
}
行爲是未定義的。當我跑它時,它隔斷了。
0
C是很久以前設計的,一些設計選擇是在不再流行的情況下進行的。當函數原型是可選的,並且模糊性不能從上下文中解析出來時,運算符的地址需要將對象的地址而不是其值傳遞給函數。爲了一致性,使用相同的語法進行賦值。
然而要注意你提出的語法簡化,可以不再區分這些情況:
void *p;
void *q = &p; // make q point to the pointer p
void *q = p; // set q to the value of p
還有其他潛在的語法簡化:
的
.
和->
運營商爲對象,指針引用可以合併成一個運營商。的
*
語法間接函數調用:(*fun)()
是reduncdant作爲fun()
是完全等價的。(請注意,您可以編寫(****fun)()
太)
相關問題
- 1. 參考變量和常量指針變量有什麼區別?
- 2. 常量指針和整型常量指針有什麼區別?
- 3. 使用結構指針和結構變量有什麼區別?
- 4. c#變量指針
- 5. 指針變量
- 6. 指向指針的指針與C中指針的地址有什麼區別?
- 7. 正常指針和常量指針在c中的區別
- 8. 指針VS變量,Objective-C
- 9. 指針變量的值C
- 10. C++成員變量指針
- 11. C指針Matlab的變量
- 12. 指針,動態變量,C++
- 13. ROM變量指針指向RAM變量?
- 14. C中指針和變量之間的區別?
- 15. 指針或變量?
- 16. 指向變量的指針
- 17. 指針或全局變量的指針?
- 18. Boost智能指針和std智能指針有什麼區別?
- 19. 泛型指針和void指針有什麼區別?
- 20. 爲什麼不使用指針變量
- 21. 單個變量和數組的動態指針分配有什麼區別?
- 22. C++矢量指針指針
- 23. C++指針和變量範圍
- 24. C指針和臨時變量
- 25. C#指針和值類型變量
- 26. C中的指針和變量
- 27. 更改常量變量的指針C++
- 28. 什麼區別=指針
- 29. C指針,指向全局變量:不同的指針
- 30. 爲什麼指向變量的指針保持有效?
爲什麼要使用C++標記爲一個C的問題? – 2017-07-02 15:44:58
我以爲這兩個使用非常相似的語法,並建議。 :/ – Pixel
您需要閱讀[好書](https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –