历来一直鄙视那些一行表达式里一坨++--的C试题, 今天偶然看到一个, 没有注意, 做的时候还真中招了,唉,看来自己基础东西还是有点薄弱阿。
题目如下:
指针运算:
int *p1, *p2;
int value;
p1 = (int *)0x500;
p2 = (int *) 0x508;
value = p2-p1;
问:value的值?
网上给的答案式2, 奇怪了很久。仔细想来, 其实value = p2-p1就相当于(508-500)/sizeof(int)。那么这样其实答案就是不确定的, 在windows/TC上, 那么value=4, 而在AIX上就成了2, 原因就在于int在不同的编译器和OS下的大小时不一样的。
猛一下看题, 真是很容易被题目晃点, 其实就是让你明白地址的加减运算,例如下面的形式就很常见了:
int a[5];
int i;
int *p1=a;
for (i=0;i<5;i++)
{
*p1=i;
p1++;
}