函数指针与指针函数的学习总结

  次阅读 作者:智能小宝 来源:互联网 2016-01-26 10:15 我要评论(0)

函数指针是指向函数的指针,指针函数是指一个函数的返回值是一个指针,但下面的几道题还是感觉很迷惑。各位能否讲的详细点呢?

(1) float(**def)[10]def是什么?

(2) double*(*gh)[10]gh是什么?

(3) double(*f[10])()f是什么?

(4) int*((*b)[10])b是什么?这样老感觉有点乱,有什么窍门可以记得并理解的清楚一点么?

======================

解答:

(1) def是一个指针, 指向的对象也是一个指针, 指向的指针最终指向的是10个float构成的数组.

(2) gh是指针, 指向的是10个元素构成的数组, 数组的元素是double*类型的指针.

(3) f是10个元素构成的数组, 每个元素是指针, 指针指向的是函数, 函数类型为无参数且返回值为double. 下面要讲的窍门的例子跟这个很类似.

(4) b是指针,指向的是10个元素构成的数组, 数组元素为int*类型的指针.

窍门如下:

如果我们碰到复杂的类型声明,该如何解析它?例如:

char (*a[3])(int);

a到底被声明为什么东东?指针?数组?还是函数?

分析时,从a 最接近(按运算符优先级)处开始。我们看到a最接近符号是[ ]注意:*比[ ]的优先级低。a后既然有[ ],那么a是数组,而且是包含3个元素的数组。

那 这个数组的每个元素是什么类型呢?虽然数组a只含有a[0]、a[1]、a[2]三个元素,a[3]实际上已经越界,但在分析数组a的元素的类型时,我们 正好需要形式上的元素a[3]。知道了a[3]的类型,就知道了a的元素的类型。 a[3]是什么类型?是指针,因为它的前面有*. 由此可知,数组a的元素是指针。

光说是指针还不够。对于指针,必须说出它指向的东东是什么类型。它指向的东东是什么,就看*a[3]是什 么(a[3]是指针,它指向的东东当然是*a[3])了。继续按优先级观察,我们看到*a[3]后面有小括号,所以可以肯定*a[3]是函数。即数组a的 元素是指向函数的指针。

指向的是什么类型的函数?这很明显,是入参为int、返回值为char的类型的函数。

至此解析完毕。

按上述方法,再复杂的也可以一步步解析出来。

就像习武不是为了打人而是为了防身一样,我们了解上述方法是为了看懂别人写的复杂声明,而不是为了在实践中自己去构造这种复杂的东东。实在需要复杂声明时,可以用typedef替代一部分。例如上面语句可改成两句:

typedef char (*FUN_PTR)(int);

FUN_PTR a[3];

这样就清晰多了。

此外,上面的分析方法还让我们对某些东西的本质更加清楚。比如,n维数组的本质都是一维数组。看个具体的例子:

int a[3][5];

这句声明的是一个包含3个元素的一维数组,其每个元素又是一个由5个int数构成的数组。我们不能理解为:a是一个包含5个元素的一维数组,其每个元素又是一个由3个int数构成的数组。为什么?还是按上面的方法分析,这里从略。

有的书上或网上提供"向右看,向左看"的方法, 其实缺乏通用性, 比如它不适用于对多维数组本质的分析. 而且这种方法掩盖了本质. 本质应该是按上面所讲的,根据运算符优先级逐层剥开.

==============================================================================

一、指针函数

当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。

格式:

类型说明符 * 函数名(参数)

当然了,由于返回的是一个地址,所以类型说明符一般都是int。

例如:int *GetDate();

int * aaa(int,int);

函数返回的是一个地址值,经常使用在返回数组的某一元素地址上。

复制代码 代码如下:

int * GetDate(int wk,int dy);

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...