操作堆区(动态内存)
动态内存:堆区
特点:程序员自己管理(申请malloc和释放free)
1、申请空间:malloc / calloc
void *malloc(size_t size);
功能:在堆区申请一片连续的空间
参数:所需申请空间所占字节数
返回值:成功返回申请到空间的首地址,失败返回NULL
注意:返回值void *代表是一个万能指针,需要强转方可使用。
void *calloc(size_t nmemb, size_t size);
2、初始化空间:memset:
void *memset(void *s, int c, size_t n);
功能:用来内存重置
参数1:所需重置内存空间首地址
参数2:所需重置的字符
参数3:所需重置空间的大小(字节数:sizeof()可以测得)
返回值:成功首地址 失败NULL
3、扩容空间:realloc
void *realloc(void *ptr, size_t size);
功能:用来扩容空间
参数1:所需扩容空间的首地址
参数2:所需扩容之后的总字节数(旧字节数+新字节数)
返回值:成功返回扩容之后连续空间的首地址 失败也是返回NULL
4、释放空间:free
void free(void *ptr);
功能:释放申请的到连续空间
参数:所需释放空间的首地址
函数指针
返回值类型 (*指针变量名)(数据类型1 形参1,数据类型2 形参2......);
赋值方式:
形式1:函数指针变量名 = 函数名
形式2:函数指针变量名 = &函数名
函数指针取别名
typedef 旧类型 新类型;
回调函数
概念:将一个函数指针作为参数传递给A函数,在A函数中通过该指针调用其所指向的B函数,就称为回调。
结构体
可以容纳相同或者不同数据类型的元素的集合。
struct 结构体名
{
数据类型1 成员1;
数据类型2 成员2;
...
数据类型N 成员N;
};
结构体可以嵌套结构体
当使用结构体普通变量访问成员: 结构体变量名.成员名
当使用结构体指针变量访问成员: 结构体指针变量名->成员名
共用体
union 共用体名
{
数据类型1 成员1;
数据类型2 成员2;
...
数据类型N 成员N;
};
共用体所占字节空间的大小依赖于成员中占字节空间最大的作为基准进行分配空间。
大小端
大端存储 12 34 56 78
小端存储 78 56 34 12
头文件的书写
刚开始要注意一个格式:条件编译(作用:防止头文件被重复包含)
形式:
#ifndef _MAIN_H
#define _MAIN_H
1、其他头文件
2、宏的定义
3、枚举的定义
4、结构体的定义
5、共用体的定义
6、函数的声明
7、全局变量的引用(extern)
#endif