【发布时间】:2021-10-24 06:25:44
【问题描述】:
谁能解释一下为什么这里的输出是 2 1 1,这里 c 的优先级是什么?为什么 i++ 的输出是 1。在此先感谢 ~
#include <stdio.h>
void main(){
int i=1;
int *p=&i;
printf("%d%d%d\n",*p,i++,i);
}
【问题讨论】:
-
仅供参考,
main总是返回int。总是。 -
我的理解是这是未定义的行为。允许编译器在将参数传递给函数之前以任何顺序评估参数。
-
在测试中,您必须回答“未指定”。如果这不是一个选项,您的讲师可能不应该教 C。
-
@ProgEnthusiast 既然您提到这是在一次测试中出现的,那么将这个问题提请您的讲师注意可能是值得的。作为支持,您可以提出 C99 标准的相关部分,即 §6.5.2.2/10。您可以在此处获取该标准的副本:open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf。请参阅第 72 页的相关段落,其内容为 “未指定函数指示符、实际参数和实际参数中的子表达式的评估顺序,但在实际调用之前有一个序列点”.
-
@ProgEnthusiast:测试有缺陷。这是 C 标准未定义行为的众所周知的情况。
标签: c pointers operators logical-operators