Re: [問題] 陣列指標與陣列: 位址相同, 值卻不同
※ 引述《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
04/07 13:37, 1F
→
04/07 13:38, , 2F
04/07 13:38, 2F
討論串 (同標題文章)