[問題] pointer 的 offset

看板C_and_CPP (C/C++)作者 (5566 超強)時間13年前 (2012/10/16 15:53), 編輯推噓3(3010)
留言13則, 5人參與, 最新討論串1/1
int N[10]; int i; int *p; N = 0x3C for(p = N,i = 100; p-N<10; ++p,i++) *p = i+1; 看來 P的位置是 0x3C + 4 (INT) * i (index) for(;--p-N>=0;) LOOP 一開始P會到 0x64 64-3C =0x28 = 40 = 4*10 printf("%d ",*p); 從--p-N 這裡 程式自然而然可以看到 9 想問的是從數學上去計算 應該是 p-N = 4*i+0x3C - 4*0+0x3C = 4*(i-0) Complier自己幫我們把4給拿掉是嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.210.106.78

10/16 16:19, , 1F
指標+1=指標指向類型的長度
10/16 16:19, 1F

10/16 16:22, , 2F
--p-N>=0 ; 這不會是 dead-loop 我倒蠻意外的。
10/16 16:22, 2F

10/16 16:47, , 3F
原 PO 的問題: 指標減指標 = 元素數量差
10/16 16:47, 3F

10/16 16:48, , 4F
不過沒記錯的話前提是這兩個指標要指向同一個陣列才保證結果
10/16 16:48, 4F

10/16 16:48, , 5F
原 PO 這裡這樣用應該(吧?)沒什麼問題才是
10/16 16:48, 5F

10/16 16:51, , 6F
@LPH66 : --p-N>=0, 可能使得 p 指向陣列前一位址,不就沒
10/16 16:51, 6F

10/16 16:51, , 7F
保證了?另我說的dead-loop指的是, --p-N 這結果「我以為」
10/16 16:51, 7F

10/16 16:52, , 8F
怛大於零 (以為會 cast 成無號數).
10/16 16:52, 8F

10/16 17:06, , 9F
ISO/IEC 14882:2011 5.7 http://ppt.cc/oMa_
10/16 17:06, 9F

10/16 17:17, , 10F
就是那個 --p 不太確定才沒說保證沒問題 XD
10/16 17:17, 10F

10/16 17:25, , 11F
指標-指標 = 元素差 如果是 char* 指向 int*呢
10/16 17:25, 11F

10/16 17:27, , 12F
我剛剛把 int*p 轉為char* p 看起來一樣說
10/16 17:27, 12F

10/16 17:27, , 13F
但是 char N int*p 就會錯
10/16 17:27, 13F
文章代碼(AID): #1GVHAKeV (C_and_CPP)
文章代碼(AID): #1GVHAKeV (C_and_CPP)