作者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