This question already has answers here:
Parameter evaluation order before a function calling in C [duplicate]
(7个答案)
4年前关闭。
我正在编写一个将摄氏温度转换为华氏度和开氏度的小程序
它使用一个将int指针作为参数并返回Fahrenait的函数。当程序结束时,我必须更改akc整数的值,这是我将摄氏温度保存为开尔文度的地方
这是我所做的。
我的问题是,当我打印所有值时,我得到以下输出:
373摄氏度= 212.000000华氏度= 100开尔文
但结果应该是
100摄氏度= 212.000000华氏度= 373开氏温度
有任何想法吗?
函数参数的求值顺序在C中未指定。您不能假定将对第一个参数求值,然后对第二个参数求值,以此类推。要解决此问题,可以将结果保存在临时变量中。
(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