指针是整数吗,若不是整数,指针为什么可以进行加减运算

int buf[10];

int *p1=&buf[1];

int *p2=&buf[3];
printf("%d\n",p2-p1); //2

printf("%d\n",(int)p2-(int)p1); //8
为什么输出结果是2和8

指针是16进制的地址,可以进行减法。p2指向的是buf[3]的地址;p1指向的是buf[1]的地址;
因为是整型数据,所以一个整型是4个字节,p2-p1=(p2指向的地址-p1指向的地址)/sizeof(int)
p1与p2地址之间差2个整型即 8个字节大小;第二个等于是将地址转化为10进制然后在相减,故得数为8;
int a[10];

int *p1=&a[1];

int *p2=&a[3];

printf("%ld\n",p2-p1);

printf("%d\n",(int)p2);

printf("%d\n",(int)p1);
打印出转成in t型的地址,(不转int,直接打印地址也可以看出来相差8个字节)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-29
指针是 但是指针是指向的内存地址 通过内存地址进行运算的,
你所理解的整数实际上是 内存里面的值
相似回答