[問題] 指標變數相減問題

看板Programming作者 (綠豆開心果)時間12年前 (2011/10/29 03:22), 編輯推噓2(2015)
留言17則, 5人參與, 最新討論串1/1
請問各位強者大大 寫了一個很小的程式來驗證指標變數相減的結果 #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

10/29 03:23, , 1F
因為它們是int指標,距離相差0x48D個int
10/29 03:23, 1F

10/29 03:24, , 2F
0x48D*sizeof(int) = 0x48D*4 = 0x1234
10/29 03:24, 2F

10/29 13:21, , 3F
我記得指標相減是未定義的行為吧?
10/29 13:21, 3F

10/30 00:26, , 4F
google "ptrdiff_t"
10/30 00:26, 4F

10/30 12:11, , 5F
有定義啊 指標-指標=整數
10/30 12:11, 5F

10/30 12:12, , 6F
指標+整數=指標 型態變化是這樣
10/30 12:12, 6F

10/30 12:12, , 7F
不過據說在某些平台上指標不只是offset
10/30 12:12, 7F

10/30 12:13, , 8F
或是說記憶體位置不是線性的 就不能套用
10/30 12:13, 8F

10/30 22:23, , 9F
這程式以 C 標準來說完全沒定義,不過可能
10/30 22:23, 9F

10/30 22:23, , 10F
在很多電腦上都會有類似的答案...
10/30 22:23, 10F

10/30 22:24, , 11F
buganini: C 標準比你想像得龜毛很多 xDDD
10/30 22:24, 11F

11/01 10:18, , 12F
C99, Section 6.5.6 有一些說明
11/01 10:18, 12F

11/01 15:54, , 13F
buganini: 建議搜尋一下有 "array" 的句子
11/01 15:54, 13F

11/01 15:54, , 14F
這個程式中的指標都不是源自同一 array
11/01 15:54, 14F

11/01 15:55, , 15F
自然都沒有定義。姑且不談 printf 的 %p.
11/01 15:55, 15F

11/01 19:41, , 16F
我知道你的意思,指標操作確實有很多隱雷
11/01 19:41, 16F

11/01 19:42, , 17F
像offsetof也是
11/01 19:42, 17F
文章代碼(AID): #1Egm3WmK (Programming)