我的代码是:
#include<stdio.h>
int main()
{
char c='8';
int d=8;
printf("%d %d %d",d,d+=c>='0'&&c<='9',c++);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
这个问题的结果是:9 9 56.我无法理解这一点.请有人帮助我,请解释我的输出.谢谢.
您正在观察未定义的行为.d作为参数传递两次,一次传递副作用.如果按顺序完成,您的代码应该等效于
char c='8';
int d=8;
printf("%d",d);
d+= (c>='0)' && (c<='9');
printf(" %d", d);
printf(" %d",c);
c++;
Run Code Online (Sandbox Code Playgroud)
但是,因为在将副作用传递给您在此处看到的函数时,参数的计算顺序是未定义的:
char c='8';
int d=8;
d+= (c>='0)' && (c<='9');
printf("%d",d);
printf(" %d", d);
printf(" %d",c);
c++;
Run Code Online (Sandbox Code Playgroud)