C语言中的输入输出是怎样的及怎么使用怎么扩展
来源:互联网 发布:三哥家 淘宝 编辑:程序博客网 时间:2024/05/09 12:51
博主博客:codertown.cn
一、概念
这个主题是我们软件,或者说计算机软件中,很重要的一环。
通常,人类的沟通过程是这样:我说一句话(输入),你听到这句话(计算机接受),然后你脑袋反应(计算过程),最后你回应我一句话(输出给我信息)。
在上述过程中我把计算机的过程写到了括号里面。
还有一种看法就是,你可以把数据看成流的形式;如,我输出数据流到你,然后你经过处理之后又将结果数据流输送给我,总之,在编程中,我们经常就是对数据流进行处理,计算。
二、使用
C语言标准库里面,最简单的输入输出函数是:scanf、printf;
其他相关函数我会单独弄一个表,列出来,不过网上也有很多下载的,搜索“嵌入式linux库函数详解说明”,可以看到很多。
函数printf的原型如下
int printf(char *format, arg1, arg2, …);
其实从学编程的第一天起,就知道会用这个函数;
比如要打印一个整数:
printf(“t=%d\n”,10);
就这么简单的使用。但是你知道背后的为什么吗?
比如随便问几个问题:
1、前面的字符串是什么?
2、后面的arg1,arg2怎么用?
3、三个点是代表什么意思?
当然,在一般的C语言教材上,都是先给你说怎么格式转换,然后举几个例子,然后就直接用。是的,这实用教材不会告诉你每一个细节,不会告诉你那是什么,只会告诉你怎么用,但最终还是不明白。
这里,就是要讲明白则是什么意思。
首先,我们应该明白:
1、字符串其实代表的就是存放该字符串的首地址;
2、函数的参数都是存放在函数的栈空间上的,按从右到左的顺序入栈(函数那一篇博文讲过);
3、还有可变参数列表,va_args
三、内部实现
我们甚至可以自己实现一个printf打印;
两种方法:
1、使用va_args,头文件为stdarg.h,还有vsprintf;
说到这里,其实只是说,我们可以在任意地方添加我们想打印的参数,或者控制可变参数列表;
比如,我们在写一个调试打印函数的时候可以这么写:
int debug_printf(int level, char *format, arg1, arg2, …);
我表达的意思应该清楚了哈。
2、想要真正弄清楚printf的内部实现;
通过第二节中,我们可以看到,可变参数是一个一个从右往左入栈的,所以当我们取参数的时候则是从左往右还是取;
那么,我们通过解析format字符串,读到%则可以取一个参数。
思路就是这样,可以选择自己实现。
其他函数可以在读写文件之后再说。
- C语言中的输入输出是怎样的及怎么使用怎么扩展
- C语言中的宏是怎么展开的?
- C语言中的子函数和主函数有什么联系啊?它们是怎么编写的?
- C语言的一个程序是怎么执行的
- c语言中char的-128是怎么计算的
- C语言怎么使用EOF
- 实践!C语言是怎么变成汇编的
- 从背后知道C语言程序是怎么运行的
- 第一个C语言编译器是怎么编写的
- C语言的怎么应有
- 怎么使用C语言实现一个简单的类
- C语言学习大纲--怎么使用宏
- JavaScript中的Timer是怎么工作的
- JavaScript中的Timer是怎么工作的
- 程序中的字节是怎么算的
- 手机中的AR是怎么实现的
- C。K是怎么死的
- C++bitset to_ulong()是怎么计算的
- 杂(二): "** cannot be resolved to a type "eclipse报错及解决
- jQuery map将一个数组中的元素转换到另一个数组中
- 二维码扫描仪
- LeetCode:Populating Next Right Pointers in Each Node
- 使用Ant 实现批量打包Android应用
- C语言中的输入输出是怎样的及怎么使用怎么扩展
- Cookie/Session机制详解
- XmlTextWriter学习笔记
- 利用jsoup爬取百度网盘资源分享连接(多线程)
- ant教程详解--javac,java,jar,war,delete,copy,mkdir..
- CodeForces 12D Ball 多级排序 + 离散 + 线段树
- 关于百度地图iOS8的定位问题以及iPhone6 Plus黑框
- 查看android keystore 别名
- BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线