我有兩個 char 陣列,如下所示:
char *t1[10];
char(*t2)[10];
使用 sizeof 查找它們的大小時
printf("sizeof(t1): %d\n", sizeof(t1));
printf("sizeof(t2): %d\n", sizeof(t2));
我發現輸出是:
sizeof(t1): 80
sizeof(t2): 8
我很困惑為什么在使用 sizeof 運算子時會得到兩個不同的結果。
uj5u.com熱心網友回復:
對于初學者,您必須使用轉換說明符zu而不是d在輸出型別的值時size_t
printf("sizeof(t1): %zu\n", sizeof(t1));
printf("sizeof(t2): %zu\n", sizeof(t2));
這個記錄
char(*t2)[10];
不宣告陣列。它是一個指向陣列型別的指標的宣告char[10]。
因此sizeof( t1 )產生陣列的大小,同時sizeof( t2 )產生指標的大小。
考慮例如宣告
char t1[5][10];
char ( *t2 )[10] = t1;
指標由陣列t2的第一個元素(型別為 )的地址初始化。那就是它指向陣列的第一個元素。char[10]t1t1
還要考慮以下呼叫printf
printf("sizeof( *t2 ): %zu\n", sizeof( *t2 ));
呼叫的輸出將是10.
那就是取消參考指標,您將獲得 type 的一維陣列char[10]。
如果您想獲得相同的輸出,則應將第二個宣告重寫為
char *t1[10];
char *( t2)[10];
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/486434.html
上一篇:記憶體分配函式回傳的點
