ONE:
可执行文件(exe)生成的过程
1、预处理
源文件(.c)和头文件(.h)----->预处理文件(.i) ,该过程是(预处理器)处理 #include <.h>、
#include “*.h”、#define *** 等预处理指令的过程,其本质是文本复制。
2、编译
预处理文件(.i)----->汇编文件(.s),该过程是(编译器)将高级语言翻译为汇编语言的过程。
3、汇编
汇编文件(.s)----->目标文件(.o),该过程是(汇编器)将汇编语言翻译为二进制机器语言的过程
4、链接
目标文件(.o)----->可执行文件(.exe),该过程(链接器)将生成的目标文件和库文件链接在一起,从而形成可执行程序
标准输入输出函数:
printf()和scanf()函数
1、printf()
printf函数的基本结构是:printf(“格式化字符串”,参数列表…)
- 函数在调用时直接向屏幕输出格式化字符串的内容,如果是普通字符则原样输出到stdout,如果是转换说明(%m.pX)则按照规定格式将参数转化为字符输出stdout,之后屏幕从缓冲区中取走全部字符。
- 转换说明中m代表最短匹配宽度(默认为1),如果m>显示的字符,那就在显示字符前面不足空白字符。
- 转换说明中p代表精度,如果X是整数且p>显示的数字的位数,则在数字前面补足"0";如果X是浮点数,则表示保留几位小数。
常见的装换说明符:
%d:有符号十进制整数
%u:无符号十进制整数
%x:无符号十六进制整数
%f:单精度浮点数
%lf:双精度浮点数
%c:字符
%s:字符串
%p:打印地址
%%:打印一个百分号
2、scanf()
scanf函数的基本结构是:scanf(“格式化字符串”,参数列表…)
-
scanf函数本质是模式匹配函数,函数在调用时会按照格式化字符串的内容依次去stdin中匹配字符串,如果是普通字符则精确匹配,如果匹配失败则匹配下一个格式化字符;如果是空白字符则不精确匹配,一个空白字符会匹配≥0个空白字符,遇到非空白字符则匹配下一个格式化字符;如果是转换说明则按照格式匹配,匹配失败则下一个格式化字符。
-
%d、%f的匹配规则:忽略前面的空白字符,直到遇到有效字符,之后再读到空白字符是匹配结束。
-
%c的匹配规则:直接匹配缓冲区的一个字符,包括空白字符。
-
全部匹配完成之后返回匹配成功的次数,成功零次则返回"-1"。
表达式和运算符:
表达式
任何一个可以表示一个值的式子都是表达式,每个表达式都会代表一个值。
最简单的表达式:变量和常量。
运算符
注:“++”、“–”、“=” 这三个运算符会产生副作用,前两者会使操作数 ±1,后者会使左操作数的值变成右操作数的值。
局部变量和全局变量:
作用域和存储期限
存储期限分为:
①自动存储期限:放在栈区,函数出栈就没了。
②静态存储期限:放在数据段,与天地同寿。
③动态存储期限:放在堆区,除非程序员主动去释放,否则那片空间一直被占用,直到进程结束。
1、局部变量
定义在函数中的变量。
作用域:块作用域,从定义开始一直到块的末尾。
存储期限:一般是自动存储期限,但是如果用 static关键字修饰之后就变成静态存储期限。
2、全局变量
定义在函数外的变量
作用域:文件作用域,从定义开始一直到文件的末尾。
存储期限:静态存储期限