运算符++的前缀、后缀和&的记录
现有代码如下:
在C语言中,*的优先级和前缀++是属于一个(结合方向为从右向左),比后缀的++以及–的优先级高(结合方向为从左向右)~
int a[5] = {10,11,12,13,14};
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
- 点赞
- 收藏
- 关注作者
评论(0)