为了账号安全,请及时绑定邮箱和手机立即绑定

c语言中指针加减问题,求解答。

c语言中指针加减问题,求解答。

C
哔哔one 2019-04-04 02:02:22
对指针加一或者减一并不是简单的加减运算,而是以基类型数据所占有的字节数为步长的,例如下面:float a[10],*p;p=&a[4];既指针变量p指向了数组a中下标为4的元素。假如p=2000,那么p+1=2004而不是2001,且p+1指向的是a[5],p+3=2012,p+3指向的是a[7],p+3-p=12。但是两个指向同一个数组的指针变量是可以进行大小比较的,两个指针相减,得到的数据是两个指针之间的元素个数。如果我将以上例子做如下改变float a[10],*p,*q;p=&a[4],q=&a[7];那q-p=2(a[4]与a[7]之间有两个元素)与第一个式子p+3-p=12矛盾!!!请高人指点我的理解哪里错了
查看完整描述

3 回答

?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

嗯,没错,对指针的加减运算是以步长为单位的,不过这是对编译器来讲的。但是对于机器来讲,指针也是二进制数据,在机器内对它们进行运算和一般的数据是一样的,只是因为编译器知道它们是指针,所以编译器告诉你的是指针之间的步长。以下是一个测试的程序,应该能说明问题吧,仅供参考:

#include<stdio.h>
#include<stdlib.h>

void main()
{
float a[10],*p,*q;

p=&a[4];
q=&a[7];
printf("p: 0x%0xd\n", p);
printf("q: 0x%0xd\n", q);
printf("p-q: %d\n", p-q);
printf("p+3-p: %d\n", p+3-p);

system("pause");
}



查看完整回答
反对 回复 2019-04-05
  • 3 回答
  • 0 关注
  • 1033 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信