看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 5.1 程式碼如下: #include <stdio.h> int main(void) { // your code goes here int QQ[10]; printf("1. %p\n", QQ); printf("2. %p\n", QQ+1); printf("3. %p\n", &QQ+1); printf("4. %p\n", QQ+10); return 0; } 輸出結果: 1. 0xbf882f48 2. 0xbf882f4c 3. 0xbf882f70 4. 0xbf882f70 問題: 我知道第二項QQ+1的記憶位置是,是QQ的記憶體位置+4(因為陣列中每個元素都是整數 型別,佔4個Byte),但是第三項的記憶體位置我很好奇,為什麼是QQ陣列記憶結束的下 一個位置(QQ陣列index只到9,所以QQ+10剛好是QQ陣列結束完新的記憶體位置),因此 我嘗試將陣列改成20,結果得出的結果QQ+20與&QQ+1是相同記憶體位置的,雖然跟原本 預期的是一樣,但還是想問一下為什麼這樣子寫,結果是如此? 附上程式碼網址:http://ideone.com/4zF6kL -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.240.128.2 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1459223861.A.AAC.html
boss0405: 我記得之前有人PO文解釋過,還蠻詳細的,可以爬一下文 03/29 12:05
Frozenmouse: 型態的關係嗎@@?&QQ -> int(*)[10] 03/29 12:16
Frozenmouse: 啊,找到之前的討論了:/對陣列名稱取址 03/29 12:18