指针的简单运算

指针的运算
例1:

char a[20];
int *p=(int *)a;//强转并不会改变a的类型
p++;

指针变量p被初始化为指向整型变量a,即p里面是数值a的首地址,然后p+1,即指针+1,但编译器这样处理:p是一个整型类型的指针,int占4个字节,由于地址是以字节为单位,故p所指向的地址+上一个单位,即p所指向的地址由原来的变量a的地址向高地址方向增加了4个字节,此时指向了数组a 中从第4 号单元开始的四个字节。

例2

char a[20]="abcdefg";  
int *p=(int *)a;  
p+=3; 

因为p的类型是int *的类型,所以p+=3
+上3个单位的int的字节,即此时的地址向高地址方向增加了12个字节。

例3

char a[10]={“abcdefg”};
char *p=a;
char **p=&a;
printf("**p=%c\n",**p);
p++;
printf("**p=%c\n",**p);
/*p的类型是char **,指向的类型是一个char*类型
,该指向的地址是(&p),当执行p++时,会使指针加一个(sizeof(char*))即&p+4;但是*(&p+4)不知道指向哪里,所以第二个输出是个错误的输出!
*/

在32位系统中,指针的类型是4个字节。64位则占8个字节!

例4:
“++”与“*”运算优先级相同,从右向左!

*p++;//p先进行++,后与*进行运算
(*p)++;//p先与*进行运算,后++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值