Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        5年前关闭。
                                                                                            
                
        
我想知道这个程序的输出是3 3 = 3

#include<stdio.h>
#include<conio.h>
 main()
{
int a=2,b=3;
printf("%d %d=%d",a,b,a=b);
getch();
}

最佳答案

函数参数的求值顺序不确定-无法保证从左至右,从右至左或任何其他顺序求值,因此不能保证ab之前先求值a=b

但是,您调用了未定义的行为,因为您试图读取和修改a的值而没有中间的顺序点;由于未指定评估顺序,因此对于不同的平台,编译器,程序,优化设置等,结果将有所不同。未定义的行为仅意味着不需要编译器以任何特定方式处理这种情况,因此任何结果都是就语言而言,可能是正确的。

关于c - 无法理解程序的输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23346677/

10-13 05:44