二维数组的首元素是:第一行
int arr【5】;整型数组
int * parr1【10】;整形指针的数组
int (*parr2)【10】;数组指针,该指针能够指向一个数组,数组10个元素,每个元素的类型是int
int(*parr3【10】)【5】;
parr3是一个存储数组指针的数组,该数组能够存放10个数组指针,每个数组指针能够指向一个数组,数组5个元素,每个元素是int类型
数组传参(一维二维)
指针传参(一级二级)
一级指针:
int*p;--指向整型的指针
char*pc;
void*pv;--无类型的指针
二级指针:
char**p;
int**p;
数组指针:指向数组的指针
int(*p)【4】;
函数指针:存放函数地址的指针
// &函数名--取到的就是函数的地址
//pf就是一个函数指针变量
int (*pf)(int,int)=&Add;
(*(void(*)())0)();
//调用0地址处的函数
//该函数无参,返回类型是void
//1. void(*)() --函数指针类型
//2. (void(*)())0 --对0进行强制类型转换,被解释为一个函数地址
//3. *(void(*)())0 --对0地址进行了解引用操作
//4.(*(void(*)())0)() --调用0地址处的函数
//《c陷阱和缺陷》
void(*signal(int,void(*)(int)))(int);
//typedef --对类型进行重定义
typedef void(*pfun_t)(int);//对void(*)(int)的函数指针类型重命名
//1. signal和()先结合,说明signal是函数名
//2. signal函数的第一个参数的类型是int,第二个参数的类型是函数指针
//该函数指针,指向一个参数为int,返回类型是void的函数
//3. signal函数的返回类型也是一个函数指针
//该函数指针,指向一个参数为int,返回类型是void的函数
//signal是一个函数的声明
数组:
一维数组
二维数组
指针数组:存放指针的数组
回调函数