无情的搬砖机器= =
Ps:以下所有指针的概念的理解思路可以从字义层面上,从右到左进行理解。
- 指针数组 : int *p1[10];
- 数组指针 : int (*p2)[10];
- 对应概念
- 指针数组:一个存放多个指针的数组
- 数组指针:一个指向数组的指针(首地址)
- 对应用法
- 指针数组:一般是存放多个指针分别指向各个不同的字符串,不同的指针可组合起来一段话。
- 数组指针:一般是作为函数的数组形参,打印字符串可以只修改指向的字符串地址。
- 对应概念
- 结构体指针 :Student *p2;
- 结构体数组指针 :Student (*p2)[10];
- 结构体成员是指针:
- 对应概念
- 结构体指针:跟数组指针差不多
- 结构体数组指针:跟指针数组差不多,存放多个结构体指针
- 结构体成员是指针:跟普通数组差不多,但只是部分成员(元素)是指针
- 对应用法
- 结构体指针:普遍常用
- 结构体数组指针:普遍常用,可对应不同驱动的通道号(例如两路硬件选择)
- 结构体成员是指针:很常见,不过要注意初始化赋值
- 对应概念
- 指针函数: int *p3(int,int);
- 函数指针:
- int (*p4)(int,int);
- char *(*pf)(char * p);
- 传递指针: int p5(int*,int*)
- 对应概念
- 指针函数:一个返回值是 指针变量 的函数
- 函数指针:一个指向函数的指针
- 传递指针:函数形参是指针
- 对应用法
- 指针函数:不常用,有风险。不能返回局部变量指针,全局指针变量还需要返回吗?
- 函数指针:相当于留出自定义函数接口,常用于回调函数 或 程序适应(选择)不同(硬件)版本的驱动(函数)
- 传递指针:很常用,传入实参需要修改值时,就传入实参指针(数组退化被迫传入指针)
- 对应概念
Ps:
- 函数声明时,可以省略形参名,不能省略形参类型;
- 函数定义(写函数体)时,则都不能省略。
- 函数内部修改外部变量的值,需要一级指针;(函数形参)
- 函数内部修改外部指针变量的值,需要二级指针。
- 函数的实参和形参之间的传递是单向的,只能由实参向形参传递(拷贝传递)。被调函数调用完之后系统为其分配的内存单元都会被释放。我们在对常量,或者是指针进行操作的时候,实质上是对其对应的内存进行操作
- 函数指针数组:
- int (*p5[3])(int );
- char *(*pf[3])(char *p);
- 函数指针数组指针: char *(*(*pf[3])(char *p);
- 对应概念
- 函数指针数组:一个数组中,所有元素都是指针,且一个指针对应指向一个函数
- 函数指针数组指针:一个指针,指向一个数组,这个数组中,所有元素都是指针,一个指针对应指向一个函数
- 对应用法
- 函数指针数组:一个数组存放多个不同版本的驱动、算法(函数)
- 上面那个已经很极限了;这个真太花里胡哨,用不来,用的来也估计是埋坑给后面的
- 对应概念