Re: [問題] 陣列指標與陣列: 位址相同, 值卻不同
好詭異的程式, 我第一個想法和推文一樣 : compile 不會過
不過試了一下, 只有 warning.
dendrobium 解釋得和我想法不同, 所以我試了一下, 驗證我的猜測 :
int (*ptr)[2] --> 宣告 int pointer array, 不是 int array.
int (*ptr)[2] = a; --> 這個 compile 會怎麼做 ?
我加了兩行
printf("%p %p %p\n", a, a+1, a+2 );
printf("%p %p %p %p\n", ptr, ptr[0], ptr[1], ptr+1);
結果:
0xbf90a35c 0xbf90a360 0xbf90a364
0xbf90a35c 0xbf90a35c 0xbf90a364 0xbf90a364
原來 ptr[0] 放的是 a, ptr[1] 放的是 a+2 ?!!
滿出乎我的意料的
※ 引述《inventorr (風之子)》之銘言:
: 各位大大 想請教一個觀念
: 在下面的情況下, a+2 與 ptr+1 的 位址是相同的
: 但是為什麼*(a+2) 與 *(ptr+1) 的 值不同呢
: 想了好久 (我是在gcc 4.3下面編譯)
: #include<stdio.h>
: int main(int argc, char* argv[])
: {
: int a[5]={1,2,3,4,5};
: int (*ptr)[2]=a;
: printf("%p\n", a+2); //0xbf9cdd54
: printf("%d\n", *(a+2)); //3
: printf("%p\n", ptr+1); //0xbf9cdd54
: printf("%d\n",*(ptr+1)); //-1080238764
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.190.119
推
04/07 10:13, , 1F
04/07 10:13, 1F
→
04/07 10:14, , 2F
04/07 10:14, 2F
→
04/07 11:44, , 3F
04/07 11:44, 3F
→
04/07 11:51, , 4F
04/07 11:51, 4F
→
04/07 12:23, , 5F
04/07 12:23, 5F
推
04/07 19:01, , 6F
04/07 19:01, 6F
推
04/07 23:21, , 7F
04/07 23:21, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):