我的努力,以更好地瞭解指針,我寫了這個代碼:初始化指針,C和C之間的差異++編譯器(GCC-4.3.4)
int *a = 17;
printf("%d", a+3);
它在C編譯罰款使用gcc-4.3.4:http://ideone.com/abotd
然而它無法與C++編譯:http://ideone.com/IdGHy
我想知道爲什麼。我想知道發生了什麼:sizeof(int)是4,當我寫了+ 3而不是將3添加到17時,3 * 4正在被添加。
不過,如果有人能更有說服力地解釋它,我將不勝感激。
謝謝!
這是接近我尋求的答案。 我不知道我的理解是如何將它作爲指針算術指針和作爲派生'17'值的整數來處理。 –
這是C/C++語言的特性之一。是的,17是一個'int'文字,但在C語言中,編譯器在C++中自動將其轉換爲'int *',您必須手動強制轉換。我希望這是你所問的。 – mtahmed
所以,如果我理解正確:**步驟1 ** - 編譯器看到'a'是'int *',並且明白它應該自己解除引用(在C++中我必須自己做) - 所以這是我如何獲得'17'部分。 **步驟2 ** - 然後編譯器發現它應該向'a'加3,但由於'a'爲'int *'類型,它知道它應該增加3 * 4(因爲sizeof(int)= 4)。最終結果是17 + 12 = 29. 這是正確的嗎? –