t)
函数原型:void* calloc(size_t,size_t);
与malloc的区别:分配空间并且对被分配的内存空间按字节清零
堆内存分配函数:realloc(void *,size_t)
函数原型:void* realloc(void *,size_t);
从某一个地址开始分配size_t个内存空间
5、栈区:申请内存的模式采用先进后出,后进先出。
栈底的地址高,栈顶的地址低。
先入地址高,后入地址低。
栈区的内存空间在8M左右
栈区分配内存的测试
char str[8383240] = {0};
二、全局变量,局部变量
一个大括号看作一个作用域;在不同作用域内,变量可以重命名。
局部变量作用域其优先级别比全局变量优先级别更高
全局变量作用域更大,相对于局部变量。
·DAY_9 C语言函数指针
一、函数指针的定义:指向函数的指针
整型指针的定义:指针类型 指针变量
指针的重定向
函数名是一个地址
定义一个指针指向函数
定义一个函数指针(类型:具有两个整型参数(一个为整型数组,一个为整型))无返回值的函数指针)
void (*p)(int *,int) = NULL;
指针p是一个整型,函数sum是具有两个整型参数,一个整型返回值的函数,因此类型不匹配
int *p = NULL;p = sum;//错误
int (*p)(int ,int) = NULL;
p = sum;
通过指针名调用函数
int a = p(10,20);
二、取别名(为函数指针取别名)
为具有两个整型参数,一个整型返回值的函数指针类型取别名
在函数指针最前面加上typedef,去掉=以及右边的东西,此时指针名就成为了类型名
typedef int (*P)(int,int);
//通过别名定义函数指针
P p = NULL;
//将指针p指向sum函数
p = sum;
//通过指针调用
int a = p(10,10);
三、函数回调
第一步:用一个函数实现功能a;
第二部:将需要封装的代码拿出来作为函数b,在a的实现里进行调用;
第三步:定义一个函数指针类型和b一样,作为a的参数,将a实现体中b函数名换成指针名。
函数指针作为函数参数,函数调用时传入函数地址.