C语言总结
编程规范---格式(缩进,对齐,空行, 每一行代码),命名(见其名知其意)
程序编译--编译工具gcc
编译过程
预处理 gcc -E main.c -o main.i
编译 gcc -S main.i -o main.s
汇编 gcc -c main.s -o main.o
链接 gcc -o main main.o
数据类型
基本数据类型(char ,short, int, long ,float, double, bool ,unsigned-->unsigned int)--》合理利用内存
数据类型空间大小
数据类型转换:自动转换(低精度-->高精度), 强制转换(高精度-->低精度显示标明)
变量,常量,
标识符, 表达式, 语句
运算符
算数运算符
+-*/ % ++ -- a++ ,++a
关系运算符
> ,< ,>=, <=, ==, !=
逻辑运算符
&& || !
位运算符
& ,|, ~, ^, >> , << (进制互转)
控制流
for(表达式1;表达式2;表达式3), switch--case, if--else, continue, break, goto, while, do-while(); ,return
数组指针函数
数组:一维数组,二维数组
数组定义
数据类型 数组名[数组长度];
数组名:数组首地址, 数组名不能自加自减
数组下标:0---长度-1
数组越界:向前越界,向后越界
数组存储方式:一块连续的内存空间
指针:指针就是地址
int a = 10;
指针变量:指针变量保存相对应类型的地址
int *p = &a;
int **q = &p;
char a[10];
char *p = a;
sizeof(a) = ?10
sizeof(p) = ?4
指针变量大小:4
指针加减运算
指针与指针相加---无意
指针与指针相减---相差多少个元素
指针与数相加-----+数*指针类型大小 例子:int *p = 0x100, p+1 -》 0x104
指针与数相减-----(-数*指针类型大小)
函数
函数定义:数据类型 函数名称(参数列表)
形参,实参--形参是函数声明或定义时候用, 实参是函数调用时候用,实参是为了初始化形参
函数调用---数据压栈和出栈过程
传参-----值, 地址
bool membuf(char **buf, int x)
{
char **buf = &p;
*buf = (char *)malloc(x);
}
int main(void)
{
char *p = NULL;
membuf(&p, 100);
strcpy(p, "hello world");
}
函数声明
函数实现
函数递归 函数自己调用自己(必须要有使其返回的条件)
数组指针 --本身指针,指向的是一个数组 int(*p)[3];
指针数组 --本身是数组,数组中存储的是指针 int *p[3];
指针函数 --
函数指针 --本身是指针,指向是一个函数 int (*fun)(int);
函数指针数组 --本身是数组,数组中存储的是指针,这个指针指向一个函数 int (*p[3])(int)
自定义数据类型
结构体struct ---定义,定义结构体对象和指针,初始化,结构体大小(结构体位域)
共用体union --特点:多个成员共用一个空间(是以最大成员空间为共用体空间)
枚举enum --特点:enum day{mon, tus, }初始化
内存
auto, static, register, extern
void fun(void)
{
static int a = 10;
a = a+20;
printf("%d\n", a);
}
宏定义