1.6指针数组和数组指针
★指针数组
类型名 * 数组名[数组长度]
int *p[8];
★数组指针
类型名( * 数组名)[数组长度]
int (*p)[8];
☆P先与[]结合,说明p是一个数组,然后再与*结合说明数组p的元素是指向整型数据的指针,相当于定义了8个整型指针变量,用于存放地址单元。
b就是数组元素为指针的数组,本质是数组。
☆p先与*结合,是一个指针,指针指向有8个整型元素数组,p为指向数组首元素地址的指针,其本质是指针。
举例:
////
1.7指针函数和函数指针
指针函数:本质是函数,返回的是某种类型的指针
类型标识符 * 函数名 (参数表)
函数指针:本质是指针,指向的不是一般的变量,而是一个函数,每个函数都有一个入口地址,函数指针指向的就是函数的入口地址。
函数指针要与它所指向的函数具有相同类型。
用 函数指针名=函数名 的方式来引用函数。
1.8传值和传址
传值:函数调用过程中参数传递,把实参传递给形参,堆形参修改不会影响实参,对形参的修改只是修改实参的一个备份,不会影响到实参。
传址:函数调用过程中参数传递的地址,形参和实参公用一个空间,对形参修改会影响实参。
1.9递归和嵌套
递归:函数在调用的过程中自身即使主函数也是被调函数,如果在使用递归调用过程中没有停止条件,将会无限制的进行下去,直到程序崩溃。
在使用递归调用的时候,一定给一个停止条件。
嵌套:在一个函数中调用另外一个函数,不能在一个函数中定义另外一个函数。
//递归例子:猴子吃桃
10.1结构体
因为数组只能用来存储相同类型的数据,而我们时常需要将一些不同类型的元素放在一起,这就可以利用结构体,将这些元素类型封装在一起,得到一种新的自定义数据类型。
struct 结构体名
{
成员类型 成员名;
};
结构体为它的每一个成员都分配存储空间;
函数的返回类型可以定义结构体等复合类型。
结构体所占用的内存大小,为所有成员各自占用的内存大小之和。
1.11共用体
一种构造类型,由基本数据结构组成。
占用的内存大小由其成员中占用内存最大的那个决定,所有成员占用同一个起始地址和同一段内存空间,在某一时刻,只能存储某一成员的信息。
在使用结构体和共用体进行嵌套的时候,注意其中成员的引用方法,从最外层变量开始引用他的成员,如果它的成员是共用体或结构体的变量,那直接以共用体或结构体类型变量的方式引用它的成员变量。
1.12枚举
一一列举,将具有相同属性的一类数据一一列举出来。
enum 枚举类型名
{
标示符1 【=整形常熟】;
}
1.13位域
有时候并不需要占用完整的字节,只需要占一个或几个二进制位。
位域:把存储空间中二进制划分为几个不同的区域,并说明每个区域,每个区域有一个域名,允许在程序中按域名进行操作。