Re: [問題] 陣列指標與陣列: 位址相同, 值卻不同
感謝回覆
我剛剛又試了一下
發現把 *(ptr+1) 改成 **(ptr+1) 則可以顯示相同的值3
所以我可以說 **(ptr+1) 的type跟 *(a+2) 一樣嗎
如果可以的話 怎麼去理解會比較好呢 如果不行 又該怎麼解釋呢
謝謝
※ 引述《dendrobium (石斛蘭)》之銘言:
: ※ 引述《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: 114.32.4.97
討論串 (同標題文章)