<C语言>“指针数组与数组指针+指针函数与函数指针”---区别理解

来源:互联网 发布:淘宝不能发布宝贝2手 编辑:程序博客网 时间:2024/05/17 07:37

作者:wsg

时间:2017年8月15日


这四个东西很绕,学习初期让人傻傻分不清楚,实际应用当中也是让人头疼不已,下面,我用最简单的方式来教大家理解。

一、指针数组与数组指针(着重关注后面两个字)

1、指针数组:看后面两字,“数组”,说明它是一个数组,这个数组里面全部元素都是指针。

例:int *a[5] 

相当于:

int a[5];int *p1, *p2, *p3, *p4, *p5;p1 = a[0];p2 = a[2];p3 = a[3];p4 = a[4];p5 = a[5];

2、数组指针:看后面两字,“指针”,说明它是一个指针,这个指针指向的地址是一个数组的地址(简要说法:这个指针指向一个数组)。

例:int (*a)[5]

相当于:

int a[5];int *p = &a;/**注意区分&a与a的区别:两者都是表示地址,&a表示整个数组的地址,a表示数组首元素的地址。虽然两者的值相同,但是意义却不一样。而数组指针是一个指向整个数组的指针,所以严格来说这里不能用a来代替&a。**/

这里()的优先级比[]高,(*a)[5]先看(*a),(*a)是一个指针。

二、指针函数与函数指针

1、指针函数:看后面两字,“函数”,说明它就是一个函数,而返回值是指针。

例:char *func(int a, int b)

相当于(char *)func(int a, int b)

这就不难看出返回值为char *型,也就是char型指针

2、函数指针:同样看后面两字,“指针”,说明它就是一个指针,指向的地址是一个函数的地址。

例:void (*p)(int a, int b)

相当于:

void func(int a, int b)void *p;p = func;


大概就是这样,个人觉得还是说得比较浅显了,作者能力有限,若有不足之处,欢迎指正!


阅读全文
0 0