现在的位置: 首页 > 综合 > 正文

c语言的菜鸟理解到深入学习1–关于printf的小细节printf(s,i);竟然是对的

2018年04月22日 ⁄ 综合 ⁄ 共 940字 ⁄ 字号 评论关闭
本人从大一开始学习c,看了几本书之后觉得自己已经很不错了,然后开始学习MFC(c++),单片机等等,也能做些简单的东西,更是觉得自己已经很不错了,一直这样学下去也能掌握这门计算机技能。但是当自己大二了以后,自己想要参加比赛,才发现自己学的太浅,只好从新再学,有一些自己的小收获想记录下来。
先说printf
当初学习c语言的标准输入输出函数 以为print(“@#¥%”,a,b)格式就是这样,真的吗?
看看这个小程序:
 #include <stdio.h>
int main()
{
char* s = "%d";
int  i =7;
printf(s,i);
return 0;
是不是错的?运行下试试,竟然通过了。为什么会这样?
让我们打开linux_3.6的核心源码stdio.h或者vc6.0的stdio.h
vc6.0 stdio.h的宏定义 
_CRTIMP int __cdecl printf(const char *, ...);
linux_3.6内核 stdio.h
extern int printf(const char *fmt, ...) __attribute__((format(printf, 1, 2)));
原来我们平常用的格式化输入第一个参数是字符串指针。看到这一点,那么我们就可以变着形式的改变标准输入如上个程序 如这个
 #include <stdio.h>

int main()
{
char max[100];
char* s ;

int  i =7;
s = max;
s = gets(s);

printf(s,i);
printf("\n");
return 0;

输入: %d

输出:

这样
 #include <stdio.h>

int main()
{
char max[100];
char* s ;

int  i =7;
float k = 2.0;
s = max;
s = gets(s);
if(s[1] == 'd')
printf(s,i);
else if(s[1] == 'f')
printf(s,k);

printf("\n");
return 0;

输入:%d或者%f
输出 7或者2.000000
这个有什么用,这个算什么?
至少目前为止,我不知道能有什么用,但是对于理解c语言,对于深入学习c语言依然是一个小的进步。
不喜勿喷,谢谢。
ph ph 你能看到吗,^_^我是可爱的小尾巴

抱歉!评论已关闭.