[問題] 陣列記憶體位置計算

看板C_and_CPP作者 (白熊)時間8年前 (2016/03/29 11:57), 編輯推噓3(300)
留言3則, 2人參與, 最新討論串1/1
開發平台(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

03/29 12:05, , 1F
我記得之前有人PO文解釋過,還蠻詳細的,可以爬一下文
03/29 12:05, 1F

03/29 12:16, , 2F
型態的關係嗎@@?&QQ -> int(*)[10]
03/29 12:16, 2F

03/29 12:18, , 3F
啊,找到之前的討論了:/對陣列名稱取址
03/29 12:18, 3F
文章代碼(AID): #1M-Vqrgi (C_and_CPP)