看板 C_and_CPP 關於我們 聯絡資訊
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
stupid0319:指標+1=指標指向類型的長度 10/16 16:19
EdisonX:--p-N>=0 ; 這不會是 dead-loop 我倒蠻意外的。 10/16 16:22
LPH66:原 PO 的問題: 指標減指標 = 元素數量差 10/16 16:47
LPH66:不過沒記錯的話前提是這兩個指標要指向同一個陣列才保證結果 10/16 16:48
LPH66:原 PO 這裡這樣用應該(吧?)沒什麼問題才是 10/16 16:48
EdisonX:@LPH66 : --p-N>=0, 可能使得 p 指向陣列前一位址,不就沒 10/16 16:51
EdisonX:保證了?另我說的dead-loop指的是, --p-N 這結果「我以為」 10/16 16:51
EdisonX:怛大於零 (以為會 cast 成無號數). 10/16 16:52
loveme00835:ISO/IEC 14882:2011 5.7 http://ppt.cc/oMa_ 10/16 17:06
LPH66:就是那個 --p 不太確定才沒說保證沒問題 XD 10/16 17:17
SNSDpk5566:指標-指標 = 元素差 如果是 char* 指向 int*呢 10/16 17:25
SNSDpk5566:我剛剛把 int*p 轉為char* p 看起來一樣說 10/16 17:27
SNSDpk5566:但是 char N int*p 就會錯 10/16 17:27