网站https://www.geeksforgeeks.org/difference-between-p-p-and-p/说
前缀++和*的优先级相同。两者的关联性从右到左。
后缀++的优先级高于*和前缀++。后缀++的关联性从左到右。
第一个代码示例:
int x[4] = {0, 1, 2, 3};
int *ptr = x;
cout << x[0] << " at " << &x[0] << "\n";
cout << x[1] << " at " << &x[1] << "\n";
cout << x[2] << " at " << &x[2] << "\n";
cout << x[3] << " at " << &x[3] << "\n";
cout << "*ptr = " << *ptr << " at " << ptr << "\n";
cout << "*++ptr = " << *++ptr << " at " << ptr << "\n";
cout << "++*ptr = " << ++*ptr << " at " << ptr << "\n";
cout << "*ptr++ = " << *ptr++ << " at " << ptr << "\n";
这将产生输出:
0 at 0012FF1C
1 at 0012FF20
2 at 0012FF24
3 at 0012FF28
*ptr = 0 at 0012FF1C
*++ptr = 1 at 0012FF20
++*ptr = 2 at 0012FF20
*ptr++ = 2 at 0012FF24
在最后一个cout语句中,尽管使用了post增量指针,它在使用前先将其指针“ ptr”值递增。
第二个代码示例:
int cd = 7;
cout << "cd = " << cd << " at " << &cd<< "\n";
cout << "++cd = " << ++cd << " at " << &cd << "\n";
cout << "cd++ = " << cd++ << " at " << &cd << "\n";
这会产生一个输出:
cd = 7 at 0012FF04
++cd = 8 at 0012FF04
cd++ = 8 at 0012FF04
在这里的最后一个cout语句中,请注意,尽管使用了post增量运算符,但cd还是先递增然后访问。
第三个代码示例:
int c = 10;
int d = 1;
cout << c << " at " << &c << "\n";
int e = c+++d;
cout << c << " at " << &c << "\n";
cout << d << " at " << &d << "\n";
cout << e << " at " << &e << "\n";
这给出了输出:
10 at 0012FF04
11 at 0012FF04
1 at 0012FEF8
11 at 0012FEEC
我们看到在语句中访问之后,++会增加vars值。
第3个代码示例中的问题与前两个代码示例中的问题不同,为什么后递增运算符在访问变量“ c”之前没有增加它的值? 为什么在上一个代码示例中,变量没有收到值12?
答案 0 :(得分:0)
“为什么后置增量运算符未增加变量的值 “ c”,然后再访问它”
因为它是一个 post 增量运算符。它会评估其操作数,然后再递增。
因此,int e = c+++d;
被解释为“将c
+ d
分配给e
,并同时递增c
。”
在前两个示例中,您编写了更改变量值并评估该变量的代码,而没有任何序列点来限制操作的顺序。