自增运算符++和取内容运算符之间的关系

来源:互联网 发布:漫画封面设计软件 编辑:程序博客网 时间:2024/06/13 22:57

现有代码如下:

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

int a[5] = {1011121314};int *p, *q, b;p = a;

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后的值直接返
回改变了运算对象。与之相比,后置版本需要先存储自增前的值,以便返回未修改的值。这是一种浪费。

原创粉丝点击