C ++运算符优先级查询

时间:2018-09-17 18:47:32

标签: c++ operator-keyword

网站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?

1 个答案:

答案 0 :(得分:0)

  

“为什么后置增量运算符未增加变量的值   “ c”,然后再访问它”

因为它是一个 post 增量运算符。它会评估其操作数,然后再递增。

因此,int e = c+++d;被解释为“将c + d分配给e,并同时递增c。”

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