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

本人从大一开始学习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 你能看到吗,^_^我是可爱的小尾巴

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值