900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 「C语言」指针数组 数组指针 指针函数 函数指针

「C语言」指针数组 数组指针 指针函数 函数指针

时间:2021-10-14 02:44:48

相关推荐

「C语言」指针数组 数组指针 指针函数 函数指针

相信很多人和我一样,有着这样的恐惧,那就是这四个玩意怎么也分不清,这都是啥啥啥啥呢?今天我们来具体分析一下。其实要具体了解这四个概念,只需要了解符号优先级,并关注最后两字,你就成功了一半。

符号优先级

在一个表达式中可能包含多个不同运算符连接起来的、具有不同数据类型的数据对象;由于表达式有多种运算,不同的结合顺序可能得出不同结果甚至出现运算错误。所以表达式必须按一定的顺序进行结合,才能保证运算的合理性和结果的正确性、唯一性。所以请牢牢记住下面三个符号的优先级判断,这对今天理解这四个概念,十分重要!

(内)>[]>*

指针数组

指针数组:一个数组,数组的元素是一个指针!

常用形式:类型*变量[长度]

int*p1[10];/*由于[]的优先级比*更高p1表示一个10个元素的数组int*表示元素是一个指向int的指针即:p1[0],p1[1]...各自装着一个int指针*/

指针数组比较容易理解,就是一个数组,里面装的是指针!

数组指针

数组指针:一个指针,而指针的指向是一个数组!

常用形式:类型 (*变量)[长度]

int(*p2)[10];/*由于()的优先级高,所以p2表示是一个指针指针指向的地址长度为int[10]的大小即:p2为一个指向int[10]数组的指针*/

有时候我们也把数组指针成为“行指针”,遇到多维数组的时候经常使用。

inta[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};int (*p)[4];p = (int(*)[4])a;for(inti=0;i<3;i ){for(intj=0;j<4;j ){printf("%d\n",*(*(p i) j));}}

指针函数

指针函数:一个函数,函数的返回值是一个指针!

常用形式:返回类型* 函数名(形参类型形参名)

int*max(int*a,int*b) {return (*a > *b) ? a : b;}

指针函数也比较容易理解,就是返回的是一个指针的函数。

函数指针

函数指针:一个指针,指针指向的是一个函数!

常用形式:返回类型 (*变量)(形参类型)

int(*func)(float,float);/*(*func)表明func是一个指针,指向一个函数前面int,表示该返回值后面的两个float表明该函数的两个形参类型*/

举个例子:

intsum(inta,intb) { return a b;}intmain() { //声明同时初始化函数指针 int (*ptr)(int, int) = sum;//使用*ptr即可替代sum函数 printf("%d\n", (*ptr)(10, 20)); return 0;}

到这里是不是觉得这一切so easy?那么难度开始提升~

constchar*(*f_ptr[10])(inta[],double*b)

请问f_ptr是啥?别慌,看上去这行代码很长,但是我们一起来分析一下:

f_ptr后面跟着[10],由于[]的优先级更高,所以f_ptr是一个长度为10的数组!我们把f_ptr[10]看作为 X ,那么数组里面装的啥呢?

constchar*(*X)(inta[],double*b)

观察X之前的* ,所以数组里装的是指针!我们把 (*X)看作为Y,那么这个指针指向的又是什么呢?

constchar*Y(inta[],double*b)

仔细观察Y前后,就可以发现这是一个函数指针,指针指向的函数返回一个const char *的指针,而函数的形参(int[],double*)。

综上,f_ptr是一个长度为10的数组,数组元素为返回constchar*,参数(int[],double*)的函数指针。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。