我寫這篇文章的代碼輸出功率爲這樣B C D E
不同的行爲
char a[5] = {'A' , 'B' , 'C' , 'D'};
char *b = a + 2;
int i = 0 ;
for(i = 0 ; i < 4 ; i ++)
{
*b = (a[i] + 1);
printf("%c",*b);
}
但是當我添加這樣的參考:
char a[5] = {'A' , 'B' , 'C' , 'D'};
char *b = &a + 2;
int i = 0 ;
for(i = 0 ; i < 4 ; i ++)
{
*b = (a[i] + 1);
printf("%c",*b);
}
輸出成爲剛剛B
。
'&a + 2'正在添加2 *大小的數組。當然,完全啓用警告的編譯器會抱怨。節省時間,啓用編譯器警告。 – chux
這應該產生一個編譯器警告。如果沒有,你需要提醒你的警告,並*修復*(不掩蓋)所提到的問題。在這種情況下,它是一個指針算術的東西。 '&a'是'char(*)[5]',而不是'char *',所以表達式'a + 2'自然會產生與'&a + 2'不同的結果。給傷口加鹽,後者也引起*未定義的行爲*。 – WhozCraig
感謝您的幫助 –