我對指向 char 的指標陣列如何在 C 中作業感到困惑。
這是我用來理解指向 char 的指標陣列的代碼示例。
int main() {
char *d[]={"hi","bye"};
int a;
a = (d[0]=="hi") ? 1:0;
printf("%d\n",a);
return 0;
}
我越來越a = 1了d[0]="hi"。讓我感到困惑的是,既然d是一個 char 指標陣列,不應該a[0]等于字串h的地址?hi
uj5u.com熱心網友回復:
C 2018 6.4.5 指定字串文字的行為。第 6 段指定源代碼中的字串文字會導致創建字符陣列。當陣列在運算式中用作 的操作sizeof數、一元的運算元&或用作用于初始化陣列的字串文字時,它會自動轉換為指向其第一個字符的指標。因此char *d[]={"hi","bye"};初始化d[0]andd[1]以指向 and 的第一個字符,并與"hi"指向another的第一個字符的指標進行比較。"bye"d[0]=="hi"d[0]"hi"
第 7 段說相同的陣列可以用于相同的字串文字:
如果它們的元素具有適當的值,則未指定這些陣列是否不同……
"hi"因此,當您的編譯器獲取in的第一個元素的地址時d[0]=="hi",它可能(但不是必須)使用與"hi"初始化d[0]in時相同的記憶體char *d[]={"hi","bye"};。
(請注意,該段落還允許將相同的記憶體用于與其他字串文字末尾的子字串相同的字串文字。例如,"phi"并且"hi"可以共享記憶體。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439013.html
下一篇:用指標定義靜態陣列的編譯錯誤
