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

看板C_and_CPP作者時間14年前 (2010/04/07 09:55), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串5/5 (看更多)
好詭異的程式, 我第一個想法和推文一樣 : 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
不用出乎意料吧?? 你知道 int (*ptr)[2]; 這個宣告表示
04/07 10:13, 1F

04/07 10:14, , 2F
什麼的話就不會意外了, 另外d大的回文裡都已經解釋了:)
04/07 10:14, 2F

04/07 11:44, , 3F
dendrobium說ptr是 int ary, 我認為是 int pointer ary
04/07 11:44, 3F

04/07 11:51, , 4F
我想錯了嗎?
04/07 11:51, 4F

04/07 12:23, , 5F
我真的想錯了,再看一次dendrobium的回文, 才知道
04/07 12:23, 5F

04/07 19:01, , 6F
VS2008不給過..囧
04/07 19:01, 6F

04/07 23:21, , 7F
C++的話應該要用強轉型, C可能只會報個warning....@_@"
04/07 23:21, 7F
文章代碼(AID): #1Bk-NwP- (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Bk-NwP- (C_and_CPP)