您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-15 17:25 531 查看
作者: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;

大概就是这样,个人觉得还是说得比较浅显了,作者能力有限,若有不足之处,欢迎指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: