作者garlos (綠豆開心果)
看板Programming
標題[問題] 指標變數相減問題
時間Sat Oct 29 03:22:06 2011
請問各位強者大大
寫了一個很小的程式來驗證指標變數相減的結果
#include <stdio.h>
int main(int argc, char *argv[]){
int *a = (int *)0x1ff1234;
int *b = (int *)0x1ff0000;
int c = (int )a;
int d = (int )b;
printf("a = %p\n", a);
printf("b = %p\n", b);
printf("substract a - b value = %p\n", a - b );
printf("substract c - d value = %p\n",c - d );
return 0;
}
==================================
輸出結果為
a = 0x1ff1234
b = 0x1ff0000
substract a - b value = 0x48d
substract c - d value = 0x1234
小弟愚鈍的是為甚麼 a - b 不是 0x1234 呢
不就指標指向的address 相減嗎
非常感謝解惑!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.185.75.196
1F:→ james732:因為它們是int指標,距離相差0x48D個int 114.35.184.77 10/29 03:23
2F:→ james732:0x48D*sizeof(int) = 0x48D*4 = 0x1234 114.35.184.77 10/29 03:24
3F:推 lmr3796:我記得指標相減是未定義的行為吧? 140.112.217.3 10/29 13:21
4F:→ akasan:google "ptrdiff_t" 114.36.169.185 10/30 00:26
5F:→ buganini:有定義啊 指標-指標=整數 140.131.149.15 10/30 12:11
6F:→ buganini:指標+整數=指標 型態變化是這樣 140.131.149.15 10/30 12:12
7F:→ buganini:不過據說在某些平台上指標不只是offset 140.131.149.15 10/30 12:12
8F:→ buganini:或是說記憶體位置不是線性的 就不能套用 140.131.149.15 10/30 12:13
9F:推 Favonia:這程式以 C 標準來說完全沒定義,不過可能 140.112.30.39 10/30 22:23
10F:→ Favonia:在很多電腦上都會有類似的答案... 140.112.30.39 10/30 22:23
11F:→ Favonia:buganini: C 標準比你想像得龜毛很多 xDDD 140.112.30.39 10/30 22:24
12F:→ buganini:C99, Section 6.5.6 有一些說明 140.131.149.15 11/01 10:18
13F:→ Favonia:buganini: 建議搜尋一下有 "array" 的句子 140.112.30.39 11/01 15:54
14F:→ Favonia:這個程式中的指標都不是源自同一 array 140.112.30.39 11/01 15:54
15F:→ Favonia:自然都沒有定義。姑且不談 printf 的 %p. 140.112.30.39 11/01 15:55
16F:→ buganini:我知道你的意思,指標操作確實有很多隱雷 140.131.149.15 11/01 19:41
17F:→ buganini:像offsetof也是 140.131.149.15 11/01 19:42