为什么我得到不同的 i 值。
#include <stdio.h>
void pri(int,int);
int main()
{
float a=3.14;
int i=99;
pri(a,i);
getch();
}
void pri(int a,int i)
{
printf("a=%f i=%d\n",a,i);
printf("i=%d a=%f\n",i,a);
}
为什么我得到不同的 i 值。
#include <stdio.h>
void pri(int,int);
int main()
{
float a=3.14;
int i=99;
pri(a,i);
getch();
}
void pri(int a,int i)
{
printf("a=%f i=%d\n",a,i);
printf("i=%d a=%f\n",i,a);
}
您声明a
为 int,但您正在使用%f
它,因此应将其声明为 float:
void pri(float a, int i)
{
printf("a=%f i=%d\n", a, i);
printf("i=%d a=%f\n", i, a);
}
如果你的类型不正确,你会得到未定义的行为。阅读规范printf
(7.19.6.1 第 9 段):
如果转换规范无效,则行为未定义。如果任何参数不是相应转换规范的正确类型,则行为未定义。
强调我的。
解释您的评论问题:
printf("a=%f i=%d\n", a, i);
将评估为:
printf("a=");
printf(/*next arguments up to size of float*/ a, i);
printf(" i=");
printf(/*...decimal*/ /*whatever is on the stack, because a and i are already consumed*/);
你可以拯救你的功能: 'printf("a=%fi=%d\n", (float)a, i);'