【发布时间】:2020-10-20 16:19:43
【问题描述】:
这段代码:
int scores[] {1,2,3,4};
int *score_ptr {scores};
//let's say that initial value of score_ptr is 1000
std::cout<<*score_ptr++;
产生输出:
1
由于*和++具有相同的优先级,然后关联性是从右到左,我们不应该先应用++运算符,即先增加指针然后再增加*(取消引用)吗?
因此,score_ptr 将相应地增加到 1004,然后取消引用它将给出分数的第二个元素,即 2。
这如何以及为什么给我输出1 而不是2?
【问题讨论】:
-
“关联性”这个词有问题。它在 C++ 17 标准中只使用过一次,并且在描述如何解析表达式的注释中。如何评估像
*score_ptr++这样的表达式的规则不属于标准中的语法产生式。优先级和关联性“规则”(用于语言的非正式描述)源自这些规则,并不一定能准确告诉您实际规则是什么。
标签: c++ pointers computer-science operator-precedence