為什么 * 用于宣告指標?
它洗掉了間接性,但是當你宣告一個指標時不洗掉任??何int *a = &b,難道它不應該洗掉的間接性&b嗎?
uj5u.com熱心網友回復:
任何時候你有一個像這樣初始化的指標宣告:
type *x = expr;
它相當于單獨的初始化后跟賦值:
type *x;
x = expr;
它不等于
type *x;
*x = expr; /* WRONG */
uj5u.com熱心網友回復:
它是宣告的一部分,因此它根本不是解參考運算子。然而它仍然意味著同樣的事情。
int *a
可以讀作
指向的值
a是一個int。
就像
printf("%d\n", *a);
可以讀作
列印 指向的值
a。
見這個答案要宣告在C / C指標變數 的正確方法對這樣的背景有點。
uj5u.com熱心網友回復:
C 和 C 中的許多符號是多載的。也就是說,它們的含義取決于使用它們的背景關系。例如,符號&可以表示地址運算子和二進制按位 AND 運算子。
*宣告中使用的符號表示一個指標:
int b = 10;
int *a = &b,
但在運算式中使用,當應用于指標型別的變數時,表示解參考運算子,例如:
printf( "%d\n", *a );
它還可以表示乘法運算子,例如您可以這樣寫:
printf( "%d\n", b ** a );
這與
printf( "%d\n", b * *a );
類似地,這對方括號可以用在陣列的宣告中,例如:
int a[10];
并作為下標運算子:
a[5] = 5;
uj5u.com熱心網友回復:
回到 C 被發明的時候,做出了一個有點有趣的選擇。變數將被宣告為一種對它們如何使用的回應。
所以
int a;
意思是“你可以得到一個int出來的a。然后,
int *a;
意味著你可以int從*a.
和,
int a[3];
意味著你可以得到一個int出來的a[index]; 在這里,大小放在索引所在的位置。
這可以鏈接到復雜的情況
int *a[3];
對比
int (*a)[3];
現在如果你不知道 C 決議是如何作業的,這是不透明的;但至少你只需要學習一次!
這就是為什么有些人認為int* a是不好的形式,因為*真正依附于a不int。
命名變數的初始化是另一回事。
(some declaration) = (some expression)
宣告中的符號從不充當運算式。它們是相同的符號,只是含義不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/345302.html
下一篇:如何在while回圈之外使用變數
