*p++和*(p++)以及(*p)++的区别

*P++,因为*和++的优先级一样,结合方式都是自右向左,先执行P++使P指向下一个地址,然后再执行*操作,即取P已经增加了1后,指向的地址的数值。

例如:

int a,*p,arr[5]={5,10};

p=arr;

a=*p++;

此时a的值是10;

程序先把arr数组的首地址给了p;p=arr;

然后执行p++操作,此时p指向了arr[1];

再执行取值操纵。此时p=10;

注意以上内容是我从网上找来的,经过才keill里面运行发现不对,所以尽量少用这种炫技的方法。

在keill中以上内容

int a,*p,arr[5]={5,10};

p=arr;

a=*p++;

此时a的值是5,而不是10;所以是先*P解引用,后p又自增。

这时的程序不如写成

int a,*p,arr[5]={5,10};

p=arr;

a=*p;

P++;

此时的a的值是5

这样都明白还不会出错。如果想得到第二个数据可以先自增,再解引用;

int a,*p,arr[5]={5,10};

p=arr;

P++;

a=*p;

此时a的值是10;

*(P++)和*P++不一样的功能。

(*P)++,指的是先取p指向的地址的变量的数值,然后把数值自增1。此句不能单独使用。一般是定义一个变量,把取的值增一后存入变量中。例如

int a,*p,arr[5];

arr[0]=5;

arr[1]=10;

p=arr;(或者:p=arr[0])

a=(*p)++;

此时a的值是6;即,先取arr[0]的值,然后又增1,把此值给a;p此时仍然指向arr[0];

*(p++)指的是,先把P自增1,然后取新的p指向的内存的数值。

int a,*p,arr[5];

arr[0]=5;

arr[1]=10;

a=*(p++);此时a的值是a[1]的值,10。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值