Re: [問題] 陣列指標與陣列: 位址相同, 值卻不同

看板C_and_CPP作者 (石斛蘭)時間14年前 (2010/04/07 00:20), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串2/5 (看更多)
※ 引述《inventorr (風之子)》之銘言: : 各位大大 想請教一個觀念 : 在下面的情況下, a+2 與 ptr+1 的 位址是相同的 : 但是為什麼*(a+2) 與 *(ptr+1) 的 值不同呢 因為type不同 : 想了好久 (我是在gcc 4.3下面編譯) : #include<stdio.h> : int main(int argc, char* argv[]) : { : int a[5]={1,2,3,4,5}; a 是由 int 所組成的 array : int (*ptr)[2]=a; ptr 所指的是 int[2] (長度是2的int array) : printf("%p\n", a+2); //0xbf9cdd54 a+2 = a + 2*sizeof(int) : printf("%d\n", *(a+2)); //3 *(a+2) 的 type 是 int 所以輸出無誤 : printf("%p\n", ptr+1); //0xbf9cdd54 ptr+1 = a + sizeof(int[2]) = a + 2*sizeof(int) : printf("%d\n",*(ptr+1)); //-1080238764 *(ptr+1) 的 type 是 int[2] 也就是說...它是個陣列 所以你用 %d 輸出看起來會很奇怪 用 %p 看起來就會正常了, 但輸出會跟 printf("%p\n", ptr+1) 相同 這是因為 array 特性的關係 : } -- 人家可不是為了你才這樣做的哦! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.198.35.85 ※ 編輯: dendrobium 來自: 60.198.35.85 (04/07 00:25)

04/07 13:37, , 1F
真有意思 那如果用 printf("%d\n",**(ptr+1)); 會輸出3嗎?
04/07 13:37, 1F

04/07 13:38, , 2F
噢 我看到了 下面的回文有
04/07 13:38, 2F
文章代碼(AID): #1BkrzOoe (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BkrzOoe (C_and_CPP)