运算符++的前缀、后缀和&的记录

举报
ReCclay 发表于 2022/02/22 01:47:37 2022/02/22
【摘要】 现有代码如下: 在C语言中,*的优先级和前缀++是属于一个(结合方向为从右向左),比后缀的++以及–的优先级高(结合方向为从左向右)~ int a[5] = {10,11,12,13,14}...

现有代码如下:

在C语言中,*的优先级和前缀++是属于一个(结合方向为从右向左),比后缀的++以及–的优先级高(结合方向为从左向右)~

int a[5] = {1011121314};
int *p, *q, b;
p = a;
  
 
  • 1
  • 2
  • 3

1.后缀++

p = a;
q = P++;

结果为:p指向a[1], q仍然指向a[0]后缀返回的是自增前的值。
2.前缀++

p = a;
q = ++p;

结果为:p指向a[1], q也指向a[1]前缀返回的是自增后的值。

3.*p++

p = a;
b = *p++;

p指向a[1], b的值为自增前的值即是a[0]即是10.

4. *(p++)

p = a;
b = *(p++);

结果同3,*和++的运算顺序为从右向左

5.*++p

p = a;
p = *++p.

p指向a[1],++p指向自增后的值,即p为a[1]的值,11。

6.*(++p)

p = a;
b = *(++p);

结果同5
7.++(*p)

p = a;
b = ++(*p);

p指向a[1], 只要有++它肯定就会变。b的值为a[0]加1后的值,因为是前缀,返回自增后的值。

8.++*p

p = a;
b = ++*p;

结果同7

总结一下原则:
前缀, 值为变化后,后缀, 值为变化前。

在C++中,建议除非必须,否则不使用后置版本的递增递减运算符

其原因是前置版本的递增运算符避免了不必要的工作,把加1后的值直接返
回改变了运算对象。与之相比,后置版本需要先存储自增前的值,以便返回未修改的值。这是一种浪费。

文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。

原文链接:recclay.blog.csdn.net/article/details/75787074

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。