枚举也可以用来创建新的数据类型
枚举类型存储区就是整数类型存储区,枚举类型存储区在使用的时候只能存放有限
的几个整数
声明枚举类型的时候需要提供一组名称,计算机为每个名称分配一个对应的整数,只有这些整数可以记录在这种枚举类型的存储区里
不同枚举类型存储区里可以记录的整数范围不同
声明枚举类型的时候应该使用enum关键字
计算机把从0开始的连续非负整数分配给枚举类型中的所有名称
可以在声明枚举类型时指定某个名称对应的整数,后面名称对应的整数都会随之变化
联合也可以用来创建新的数据类型
声明联合的时候需要使用union关键字
联合的成员变量对应的存储区互相重叠,联合存储区可以当作多种不同类型的存储区使用,每个成员变量代表一种可能的类型
联合的所有成员变量存储区的开始地址一样
联合存储区的大小是最大成员变量存储区的大小
记录普通变量地址的指针叫一级指针
记录一级指针地址的指针叫做二级指针
声明二级指针的时候需要写两个*
二级指针前使用**可以表示捆绑的普通变量存储区
二级指针前使用*可以表示捆绑的一级指针存储区
二级指针可以用来代表指针数组,但是不可以代表二维数组
无类型指针有可能实际上代表的是二级指针
二级指针通常作为形式参数使用,它可以从调用函数向被调用函数传递一个一级指针存储区
C语言里函数也有地址
函数名称可以表示函数的地址
函数指针可以用来记录函数的地址
函数指针也需要先声明然后才能使用
函数指针声明语句可以根据函数声明语句变化得到
函数指针也有格式区分,不同格式的函数指针适合与不同的函数捆绑
函数指针可以用来调用函数
可以作为实际参数使用的函数叫回调函数
可以在程序运行的时候临时决定需要分配多少存储区
这种分配方法叫动态分配
为了使用动态分配内存需要用到一组标准函数
为了使用这些标准函数需要包含stdlib.h头文件
malloc函数可以动态分配一组连续的字节
这个函数需要一个整数类型参数表示希望分配的字节个数
他的返回值就是分配好的第一个字节的地址
如果分配失败就返回NULL
这个函数的返回值记录在无类型指针的存储区里,需要首先强制类型转换成有类型指针然后才能使用
动态分配内存不使用之后必须释放
free标准函数可以用来释放动态分配内存
free函数需要一个参数,这个参数代表动态 分配的第一个字节的地址
free函数会把一次分配的所有内存都释放掉
如果使用指针作为参数调用free函数则函数调用后指针成为野指针,必须恢复成空指针
调用函数可以使用被调用函数动态分配的内存