注解:函数指针,指针函数,指针数组....以及如何根据名称写出数组和指针

来源:互联网 发布:冻干粉去红血丝知乎 编辑:程序博客网 时间:2024/06/11 02:33

在讲指针数组,数组指针等等,先说一个关系:指针和数组没有关系

指针数组:是一个数组,那是一个什么样的数组呢?是一个存放指针的数组

举例:int *p[10];
char *p[10];
char **p[10];

数组指针:是一个指针,是个什么样的指针呢?是一个存放数组地址的指针

举例:int (*p)[10];
char (*p)[10];
那int *p[10]和int (*p)[10]有什么区别呢?
注意:首先得分清它们分别是什么,由上面可知它们分别是指针数组和数组指针。int p[10],根据运算优先级,[]运算级高于,p先和[10]结合,因此它是指针数组。而()操作符和[]优先级相等,从左向右进行运算,因此p先和()里的*结合,再和[]结合,就是数组指针了。

函数指针:根据上面的规律,一看名字就知道是指针,是一个存放函数地址的指针
看以下代码…

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>void fun(void){}int main(){    int (*p)() = (void *)&fun;    printf("%p\n", &fun);    printf("%p\n", p);    return 0;}

用函数指针指向函数地址,打印地址,结果相同

函数指针数组:顾名思义,它是一个数组,一个函数指针的数组,一个指向函数地址的指针的数组。

例子:int (*p[10])()
char (*p[10])()

指向函数指针数组的指针: 如上解释,写出的形式如:int (*(*p)[])()

个人建议书写类似指针或者数组的技巧:根据名字从左向右,内容从外向内写。
如:书写“指向函数指针数组的指针的数组”。
第一步:写函数,先写出()
第二步:加指针,*()
第三步:加数组,* [ ]() (因为[ ]优先级高于*,所以不必为[ ]加())
第四步:加指针,* (* )[ ] () (因为[ ]优先级高于,所以此处要在外加())
第五步:加数组,* ( *[ ])[ ] ()
第六步:加变量名,( * ( * p [ ])[ ]) ()

希望大家能多多看下最后这里,如果看懂这个,以后随便报名称,都可以写出来。
妈妈再也不用担心我的:指向函数指针数组的指针的数组的指针的数组的指针的….(后面随意发挥)
(* (* ( * ( *p )[ ]) [ ])[ ] ) ()

就酱,大功告成……

最后,欢迎评论区留言提问给我……

阅读全文
0 0
原创粉丝点击