C语言中printf的问题

代码如下:
int a = 1;
printf("%d %f %d",a,a,a);
运行结果:1 0.000000 4200720
结果中的4200720会改变,但如果把代码修改成
printf("%d %f %d %d",a,a,a,a);
则结果变成:1 0.000000 1 4200720

求告知最后一个%d的输出为什么是这个样子,为什么只有最后一个显示有问题

c语言函数参数入栈时默认是从右往左的,printf("%d %f %d",a,a,a);最右边的a最先被压入栈, 出栈时最左边的先出来,而printf在处理%f时对应的数据类型是double,也就是8个字节。那么第一个%d对应的a弹出后,%f要弹出8个字节,而int是4个字节,就是说后面两个a的8个字节数据都弹出了,那么最后一个%d实际上就越界了,所以输出随机数字
printf("%d %f %d %d",a,a,a,a); 这个也是一样的道理,第三个%d实际上输出的是第四个a的值,最后一个越界了
你这样试一下:
int a=1;
int b=2;
printf("%d %f %d %d", a, a, a, b);
第三个a会输出b的值,而最后一个%d越界了
温馨提示:答案为网友推荐,仅供参考
相似回答