内存的分区
代码区(code zone)
常数区(constant zone)
全局变量区(Global zone)
栈区(Stack zone):调用函数时,函数存在栈区里,调用后消失先进后出。
堆区(Heap zone):malloc[手动创建存储空间],free[手动回收内存空间]
函数指针
函数名代表函数在内存中的地址
函数指针指向函数地址
//1.去名留特征 2.(*指针名)定义函数指针变量
3.指向具有该特征的任意函数4.执行
函数指针和数组指针区别:函数指针不存在位移问题
有地址,就调用地址中的函数功能!
int(*p_fun) (int, int);
p_fun = add_int;
printf(“%d\n”, p_fun(30, 40));//显式调用
printf(“%d\n”, (*p_fun)(30, 40));.//隐式调用
typedef
根据既有类型 创建新的类型名称
指针的类型
int* p;基本类型指针
int(*p1)[4];一维数组指针
int(*p2)[4][4];二维数组指针
const 修饰一个变量让它变成常量
const放到谁的前面,谁就不可改
宏不是函数,只是简单的替换
全局变量和局部变量
全局变量int i;默认值为0;
小范围内局部变量占主导;
只要赋值了就等于创建新变量;
不赋值才叫声明;
static int c;默认值是0//静态全局变量,创建之后放于全局变量区,但是只能函数内访问;
栈区会二次创建,全局区域的不会消失;
栈中的数据会自动创建,自动回收;
栈
int a;
a = 10 ;
return &a;
堆
int* a = malloc(sizeof(int)); //无类型指针
int* arr = calloc(5, sizeof(int));
*a = 10;
return a;
free(a);释放地址
free(arr);
递归
向下传递一套逻辑----终止条件----向上回归
函数自身调用