C ++运算符优先级查询

问题描述 投票:-1回答:1

该网站https://www.geeksforgeeks.org/difference-between-p-p-and-p/

前缀++和*的优先级相同。两者的相关性是从右到左。

postfix ++的优先级高于*和前缀++。后缀++的相关性从左到右。

第一代码示例:

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语句中,尽管有后增量指针,它首先在使用之前递增指针“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语句中注意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的值?

c++ operator-keyword
1个回答
0
投票

“为什么后期增量运算符在访问它之前没有增加变量”c“的值”

因为它是一个后增量运算符。它评估其操作数并在之后递增。

所以int e = c+++d;被解释为“将c + d分配给e,并且还增加了c。”

在前两个示例中,您编写了更改变量值的代码,并评估该变量,没有任何序列点来限制操作的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.