This question already has answers here:
Parameter evaluation order before a function calling in C [duplicate]
                                
                                    (7个答案)
                                
                        
                                4年前关闭。
            
                    
我正在编写一个将摄氏温度转换为华氏度和开氏度的小程序
它使用一个将int指针作为参数并返回Fahrenait的函数。当程序结束时,我必须更改akc整数的值,这是我将摄氏温度保存为开尔文度的地方
这是我所做的。

float thermo(int *);
int main(){
    int akc;
    akc=100;
    printf("%dce = %f = %dK\n",akc,thermo(&akc),akc);
    system("pause");
    return 0;
}
float thermo(int *akc){
    float a=*akc;
    *akc+=273;
    return 9*a/5+32;
}


我的问题是,当我打印所有值时,我得到以下输出:

373摄氏度= 212.000000华氏度= 100开尔文

但结果应该是

100摄氏度= 212.000000华氏度= 373开氏温度

有任何想法吗?

最佳答案

printf("%dce = %f = %dK\n",akc,thermo(&akc),akc);


函数参数的求值顺序在C中未指定。您不能假定将对第一个参数求值,然后对第二个参数求值,以此类推。要解决此问题,可以将结果保存在临时变量中。

10-06 01:00