前言
该系列主要是对C语言各个知识点的一些个人总结,并没有记录具体的代码,如果想详细的学习C语言还是推荐学习一些经典的教程;但如果只是想回顾一下C语言的体系,还是可以参考一下的
C语言简介
C语言移植性强,但不能跨平台,因为C除了文件操作外,没有涉及操作系统硬件资源接口,比如进程调度、网络通信,这些接口均为每个操作系统独有的
Java虽然可以跨平台,但C语言执行效率高并且可以通过指针访问物理地址
vs编译过程
预处理-编译-汇编-链接
预处理
.h文件通过预处理将变量、函数名、常量生成.c文件,与原本的.c文件共同生生.i文件
编译
.i文件通过编译生成汇编语言文件.s
汇编
.s通过汇编生成目标文件.obj
链接
.obj链接库文件生成可执行程序.exe
调试窗口设置
调试中打开监视、调用堆栈、内存
在监视中取地址,然后拖入内存,可以看到该变量的内存地址
进程地址空间
从低地址空间0x00000000到0xFFFFFFFF依次为代码段、数据区、堆空间、栈空间、内核区
数据类型
命名变量时,不要与关键字重名,生僻的关键字有:register、volatile
常量
整型、实型、字符型常量在编译时直接编入代码段,字符串常量存在字符串常量区
符号常量:#define PI 3,在程序中如果多次用到一个常量,用define的方法来现实,便于修改
字符串常量以"\0"结尾,C语言没有定义字符串变量的关键字
浮点常量默认按double运算
变量
变量名实际上是一个地址
整型变量
程序运行时,内存称为进程地址空间。程序编译完后,开始执行时,会被放入进程地址空间的代码段区域,执行到哪句,PC指针就指向哪句代码
因特尔CPU为小端存储,如存0x7b,内存显示7b000000
通过程序员计算器可以验证对应进制的转换结果
补码的作用:CPU只能做加法,通过补码(取反加1)实现了减法、乘法、除法
int4字节、short2字节、long4-8字节,当心溢出,如果超出long的范围,用大整数加法
浮点型变量
浮点型数据有两种表示方式,分别为小数形式:0.123,指数形式:3e-3
注意精度丢失
字符型变量
以'\'开头的称为转义字符,'\n’换行、‘\0’空字符,用于标识字符串的结尾,不是空格
一个字符常量存放到一个字符变量中,实际上并不是把该字符的字型放到内存中去,而是将该字符的相应的ASCII 码值放到存储单元中,可以通过格式化为字符串得到不同的结果
类型转换
当类型不一致时,可以用强制类型转换
常用的数据输入、输出函数
标准输入接口scanf、getchar,标准输出接口printf、putchar
缓冲区
一段内存空间,分为读缓冲、写缓冲,特性如下:
全缓冲: 当缓冲区满时才进行I/O操作,如对磁盘文件的读写
行缓冲:遇到换行符时才进行I/O操作(C语言在向计算机输入时会将回车符转换为换行符,在输出时把换行符转换成回车和换行两个字符),如标准输入stdin
不带缓冲:如stderr
scanf 在读取整型数,浮点数,字符串时,会忽略\n(回车),空格等字符。但读取字符时,不会忽略任何字符
fflush(stdin)刷新标准输入缓冲区
printf格式化为字符串
printf 函数可以输出各种类型数据,整型,浮点型,字符型,字符串等,实际原理是 printf
将这些类型的数据格式化为字符串后,放入标准输出缓冲区,然后通过\n,刷新标准输出,
推到屏幕上
运算符与表达式
左值:赋值符号左边的东西
右值:赋值符号右边的东西
sizeof是字节运算符