指针的运算
指针也就是地址,那么对地址加减是什么意思呢?
对地址的加减其实就是偏移,但偏移的数不一定就是加减的数,而是储存单元,例如:
#include<stdio.h>
int main()
{
int a=10;
int *p;
p=&a;
printf("%d\n",p);
printf("%d\n",p+1);
return 0;
}
运行结果为:
由运行结果可知:上下两个数据差4,由于int型变量占据四个字节,所以地址+1也就是说地址向后偏移了1个存储单元(4个字节)。
如果定义的是其他类型的函数,也就要偏移相应的字节。
例如:
char a; &a+1就是地址向后偏移了1个存储单元(1个字节)
&a+2就是地址向后偏移了2个存储单元(1个字节),总共偏移2字节
int b; &b+1就是地址向后偏移了1个存储单元(4个字节)
&b+2就是地址向后偏移了2个存储单元(4个字节),总共偏移2*4字节
float c; &c+1就是地址向后偏移了1个存储单元(4个字节)
double d; &d+1就是地址向后偏移了1个存储单元(8个字节)
#include<stdio.h>
int main()
{
char a=0;
int b=0;
float c=0;
double d=0;
printf("&a:%d\n",&a);
printf("&b:%d\n",&b);
printf("&c:%d\n",&c);
printf("&d:%d\n",&d);
printf("&a+1:%d\n",&a+1);
printf("&a+2:%d\n",&a+2);
printf("&b+1:%d\n",&b+1);
printf("&b+2:%d\n",&b+2);
printf("&c+1:%d\n",&c+1);
printf("&d+1%d\n",&d+1);
return 0;
}
运行结果: