簡體   English   中英

C中點數組的括號放置之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM