先看下两端代码
1
int a,b,c;
a=1;
b=2;
c=3;
a=c=b;
cout<<a;
return 0;
问a=多少;
2*p++ ; *++p ; (*p)++ ; ++(*p);四者的理解
一先分析第一个
单目运符,赋值运算,与条件运算均是自右向左的 ,其余的运算符均是自左向右。
当运算符优先级相同时,结合方向就要发挥作用了,a=c=b可以自右向左看,把b赋值给c,在把c赋值给a。 结果就是a=2.
二分析第二个
首先我们要明白++p与p++的区分
i++
整体是旧值,++在后,整体是旧值。++i
整体是新值,++在前,整体是新值。
i++与++i对于i的作用效果是相同的
都等价于i=i+1。
但是两者的执行过程是不相同的
#include<iostream>
using namespace std;
int main()
{
int i=0;
cout << i++<<endl;
cout << i;
cout << ++i;
return 0;
}
输出结果为
0
1
2
i++是先执行i将i进行输出然后在进行i+1;
++i是先进行i+1然后在进行输出i;
了解这个后我再来分析;
*p++ ; *++p ; (*p)++ ; ++(*p);
*与p均属于单目运算符,优先级相同,结合方向自右向左;
当优先级不同时,按照优先级的规则运算,相同时,结合方向发挥作用;
*p++自右向左看,先进行p++在进行*p,p++是先执行p在去p+1所以这里相当于是*p;p=p+1;
*++p自右向左看,先进行++p在进行*p,++p是先p=p+1然后在*p相当于是p=p+1 ; *p;
(*p)++ 括号优先,先*p在p=p+1;
++(*p)括号优先,先*p在p=p+1;