.c文件的构成
预处理命令
头文件的包含
1. #include “”:先在工程路径下去查找,然后再去系统的环境变量下去查找
2. #include <>:在系统的环境变量下去查找
宏定义
格式 #define 宏名 要替换的东西
eg:
1. #define Pi 3.14
2. #define Cmp(x, y) { typedof(x) _x; typedof(y) _y; _x = x; _y = y; _x > _y ? _x : _y;}
条件编译
1. #if的使用
#if 0/1 ....语句... #else ...语句... #endif
2. #ifdef 和 #ifndef
#ifdef/#ifndef 宏名 ....语句.... #endif
声明语句
变量声明
内部变量声明
数据类型 变量名 [= 初值];
外部变量声明
extern 数据类型 变量名;
数据类型
整型
有符号
short(2字节)/int(4字节)/int long(4字节/32位,8字节/64位)/long long(8个字节/32位,8个字节/64位)
注意:int和short最少2个字节,并且short要少于或等于int
无符号
unsinged + 有符号
存储方式
以补码的形式存储,负数的补码的该数的绝对值取反加一或者说是(2^n + 负数)的补码
浮点型
有符号
float(4字节),double(8个字节),long double(12个字节/32位,16个字节/64位)
无符号
unsinged + 有符号
存储方式
float
符号位(1) 指数位(8) 尾数部分(23)
double
符号位(1) 指数位(11) 尾数部分(52)
小数部分以补码形式存储:小数部分*2,在取整数部份,继续*2,直到结果为一
eg: 0.6875 ==》 0.6875*2 ==》0.3750 * 2 ==》0.75 * 2 ==》0.500 * 2 ==》1,所以小数部分存储补码为 1011
指数部分
次方-1 ==》指数部分的最高位存的是左移还是右移。左移为1,右移为0。
字符型
有符号
1个字节
无符号
unsinged + 有符号
存储方式
以ASCII码值存储在内部存储单元。48~57 ==》0~9 / 65~90 ==》A~Z / 97~122 ==》a~z
语法
char 变量名 = 'a' / 23
char 变量名 = '\234' 八进制码值
char 变量名 = '\x00' 十六进制码值
数组
一维数组
定义
类型说明符 数组名[整型表达式] [= {初值列表}]; 整型表达式:指定数组中的元素个数。
引用
数组名[下标]
注意
一维数组数据类型为 类型说明符[整型表达式]。
二维数组或者多维数组
定义
类型说明符 数组名[行数][列数];
引用
数组名[行下标][列下标]
注意
C语言中只有一维数组,二维数组类型为类型说明符[列数][行数]。
指针
定义
指针变量也是一个变量,也保存数据,只不过指针变量是用来保存其他对象的地址的。
语法
指向对象的类型说明符 *变量名[ = 指向对象地址]
结构体
语法
struct 自定义类型名{……成员1(数据类型 成员名)……};
引用 结构体成员运算符(.)或者指向结构体成员运算符(->)
eg:s.num = 10; (*S).num = 10; S->num = 10;
初始化
1. 定义时按定义时的顺序一次初始化各成员变量,用逗号隔开。
2. 不按顺序,.成员变量名 = 值
3.结构体数组初始化
共用体
定义
共用体的存储空间是各成员之间共用的,同一时刻只能用一个成员变量,为了节省内存才提出共用体。
语法
uion 公用体名{……成员列表(类型说明符 成员名;)……};
扩展:电脑存储寄存器值方式
大端模式
存储器的低地址,存放寄存器的高字节;
小端模式
存储器的低地址,存放寄存器的低字节。
枚举
定义
把该类型变量所有可能的值一一列举出来。
语法
enum 枚举名 {……成员列表……};
注意
C语言在实现枚举时,枚举的具体的值,是用一个整数来表示的。可以给整数取名字,相对于名字没有对应值,从0开始,从左只有依次 + 1。
空类型(void)
字符串
定义
C语言,是没有字符串的类型。C语言的字符串是通过char*(字符型指针)来实现的。
语法
char* 变量名 = “字符串”;
注意
C语言中的字符串都是保存在一个叫.rodata(只读数据)的内在区域,字符串代表这个内在空间的首地址。通过指针只能读,不能写。
字符串处理函数
1. strlen
2. strcpy/strncpy
3. strcmp/strncmp
4. strcat/strncat
变量名
只能使用字母、数字和下划线,但只允许使用字母和下划线开头,并且要规避关键字。
类型声明
结构体声明
共用体声明
枚举声明
函数声明
函数头
返回参数数据类型 函数名(形参列表);
函数
main函数
无形参
int main(void)
有形参
int main(int argc, char *argv[] )这两个参数,一个是int类型,一个是字符串类型。
第一个参数是命令行中的字符串数。
第二个参数是一个指向字符串的指针数组。一般情况下,把程序本身的名字赋值给argv[0],接着,把后一个字符串赋给argv[1] 。
自定义函数
注意
自定义函数在其他函数中调用,必须在其他函数之前声明或者定义。
.h文件的构成
声明语句
注意:struct类型声明作用域:本文件有效
格式
#ifndef __XX_H_ #define __XX_H_ .......头文件内容........ #endif(防止头文件被重复包含)