[英]Difference between parenthesis placements for array of points in C
我正在自己學習 C 並且我很困惑為什么
int b[2][3];
int (*p)[3] = b;
不同於
int b[2][3];
int *p[3] = b;
誰能解釋一下區別?
一個是指向數組的指針,而另一個是指針數組。
這個:
int (*p)[3]
是一個指向int
大小為 3 的數組的指針。 這意味着*p
為您提供數組,而(*p)[1]
獲取該數組索引 1 處的元素。
也允許將b
分配給該指針。 這是因為b
是一個大小為 2 的數組,其成員是一個大小為 3 的int
數組,並且數組衰減到指向它們在表達式中的第一個元素的指針,因此b
從類型int[2][3]
衰減到類型int(*)[3]
匹配p
。 因此,您還可以使用p[1][2]
訪問與b[1][2]
相同的數組元素。
相比之下,這個:
int *p[3]
是一個大小為 3 的數組,其成員為int *
。 嘗試將b
分配給 this 是行不通的,因為您無法直接分配給數組,並且類型不兼容。
但是,您可以這樣做:
int x[5], y[4], y[6];
p[0] = x;
p[1] = y;
p[2] = z;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.