一道C试题

历来一直鄙视那些一行表达式里一坨++--的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++;
}  

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值