[問題] C pointer

看板C_and_CPP作者 (為人著想)時間12年前 (2013/07/27 11:45), 編輯推噓1(109)
留言10則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) gcc 問題(Question): int a[5] = {1,3,5,7,9}; int *p = (int *)(&a+1); 假設 a 的 address 是 0x7fffc3739200, 為什麼 p 指到的 address 是 0x7fffc3739214 剛開始會覺得p 應該是指到 3的位置, 但是卻發現 +1 是 加了a的大小,也就是 5*sizeof(int), 可以請問為什麼嗎? 謝謝 ------- 補充: 試了幾個不同的case, 發覺如果是用 &a+1, 他會用加上 sizeof(a)*1; 也就是說 如果上面的例子是 &a+2,他就會加入 sizeof(a)*2; -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46

07/27 11:49, , 1F
因為 &a 的型別不是 int *
07/27 11:49, 1F

07/27 11:54, , 2F
&a+1和a+1不一樣。
07/27 11:54, 2F

07/27 12:43, , 3F
我知道他們不同,只是有點不明白為什麼&a+1會是加
07/27 12:43, 3F

07/27 12:43, , 4F
a的size.
07/27 12:43, 4F
※ 編輯: ptt1ptt2ptt3 來自: 140.112.30.46 (07/27 13:09)

07/27 13:03, , 5F
&a就是代表int a[5]
07/27 13:03, 5F

07/27 13:06, , 6F
a就是一個指標了 應該是 int* p = a+1;這樣就可以了
07/27 13:06, 6F

07/27 13:16, , 7F
謝謝L大,我大概知道原因了。
07/27 13:16, 7F

07/27 15:20, , 8F
說 a 是指標的是沒寫過大程式嗎
07/27 15:20, 8F

07/28 01:30, , 9F
應該是說 a 本身可以當成指標來使用,所以 int *p = a + 1;
07/28 01:30, 9F

07/28 01:31, , 10F
那 *p == *(a + 1); 這個條件就會成立了
07/28 01:31, 10F
文章代碼(AID): #1Hyq9PwF (C_and_CPP)