博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 语言中的 printf 函数问题
阅读量:4054 次
发布时间:2019-05-25

本文共 750 字,大约阅读时间需要 2 分钟。

   昨天网友问到一个好奇怪的问题,当时也没有想通,现在解释:

   首先这里有两个貌似完全一样的代码:::

#include<stdio.h>
int main()
{
  int 5.0;
   printf("%d\n",x);
  return 0;
}
#include<stdio.h>
int main()
{
   printf("%d\n",5.0);
  return 0;
}
 
   大家可以测试一下,第一个输出的是5, 第二个是一个垃圾数;
 
 
 
 
其实这个问题想通了也是很easy、的,本质就是“类型转化”和“printf”函数处理机制!
 
printf函数的机制是:
 
 
 
 
printf()是通过把参数从右到左的顺序压栈的;如printf("a= %d b = %d", i, j );会先压 j 然后压 i 然后压这个串" a = %d 
b= %d " 的首地址所以这个调用总共要压三个参数;不管你要几个参数都好,第一个参数一定要是一个串的地址;这个地址是最后压栈的;printf()函数是不知道你到底传来几个参数的,只是当我需要参数的时候,就去调用那个高层栈元素进来,所以例如:printf( "AAA 
%d" 
);后面是没有参数的话,那么默认是给你一个垃圾数;同时也是有一个类型匹配的机制的,if说你的参数类型和输出的格式是不匹配的话,那么他也是给你一个垃圾数!就像本文的第二个代码!那么第一个代码为什么可以呢,那主要是在我们int x = 5.0的时候已经有了一个强转了,就是说此时的x就已经是5而不是5.0了!!! 
而第二个DEMO中的5.0说都不知道是什么,相当于是没有类型的值而已!
 
 
 
 
 
所以我们以后写程序都要规范化,按部就班,不要投机取巧,还有原理的东西都是很重要的呗!呵呵!大家一起加油!~
 
 
 
 
给一个参考链接:

转载地址:http://aoaci.baihongyu.com/

你可能感兴趣的文章
Java-IO-输入/输出流体系
查看>>
Java实现DES加密解密
查看>>
HTML基础
查看>>
Java IO
查看>>
Java NIO
查看>>
指针&数组&字符串&结构体
查看>>
Linux 内核api man 手册安装
查看>>
Linux 内核宏 container_of
查看>>
Ubuntu 安装bcompare
查看>>
电阻屏较准
查看>>
imx6 内核停止启动
查看>>
RTL8188EUS Anaroid M Porting
查看>>
omap 的framebuffer驱动程序
查看>>
android2.3 dvsdk
查看>>
QT Creater的安装配置
查看>>
QT5学习总结
查看>>
ubuntu 安装使用dbus
查看>>
QT QDbus
查看>>
android init launch
查看>>
nand booting
查看>>