這似乎是一個愚蠢的問題。我有一個字符陣列,想將陣列的地址存盤在另一個變數中,但似乎無法為陣列地址宣告正確的型別(我正在使用 gcc):
在:
int main(void){
char cha[] = "abcde";
char **arrayAddress = &cha;
}
出去:
arrayaddress.c: In function ‘main’:
arrayaddress.c:3:25: warning: initialization of ‘char **’ from incompatible pointer type ‘char (*)[6]’ [-Wincompatible-pointer-types]
3 | char **arrayAddress = &cha;
| ^
這是意料之中的,我在其他地方讀到的型別cha應該是char(*)[6]. 但是當我嘗試arrayAddress用這種型別宣告時,我的程式失敗了:
在:
int main(void){
char cha[] = "abcde";
char (*)[6]arrayAddress = &cha;
}
出去:
arrayaddress.c: In function ‘main’:
arrayaddress.c:3:10: error: expected identifier or ‘(’ before ‘)’ token
3 | char (*)[6]arrayAddress = &cha;
| ^
make: *** [<builtin>: arrayaddress] Error 1
^
如何arrayAddress正確定義?
uj5u.com熱心網友回復:
它是這樣寫的:
char (*arrayAddress)[6] = &cha;
請注意,變數的名稱隱藏在運算式的中間。
uj5u.com熱心網友回復:
陣列衰減為指標。
char cha[] = "abcde";
char *p1 = cha;
char (*arrayptr)[sizeof(cha)] = &cha;
cha,&cha[0]和&cha參考相同的陣列的第一個元素cha,唯一的區別是型別。
cha并&cha[0]具有型別:指向的指標char&cha具有型別:指向 6 個char元素的陣列的指標。
uj5u.com熱心網友回復:
如果您的編譯器支持typeof擴展(gcc 支持),那么您可以將指標定義為:
typeof(char (*)[6]) arrayAddress = &cha;
甚至更清潔:
typeof(char[6]) * arrayAddress = &cha;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414888.html
標籤:
