C语言——辨识你见到的类型

来源:互联网 发布:工具书软件 编辑:程序博客网 时间:2024/05/16 08:17

辨识你见到的类型


———- android培训、java培训、期待与您交流! ———-

  • 辨识你见到的类型
    • 引入
    • 追根溯源
    • 总结规律


引入

首先看一下下面的声明

int *test1();int (*test2)();

对于上面的代码该如何理解?下面我给出正确答案:

  • 返回指向int型指针名称为test1的函数。
  • 指向返回int型数值的函数名称为test2的指针。

看名字是否有些绕?下面我们来分析一下:
*号是前置运算符,优先级比“()”低,以为要让我们所需要表达的意思准确传达,需要加上()让连接正确地进行。

呵呵!是否按照我上面的分析思考了呢?告诉你上面有误解哦。

要知道,在C的语法规则中,声明中的 “*” “[]”“()”都不是运算符
这里的”*“号只是用来表示指针,而”()“用来表示括号内的是一个整体,具体该怎样读解,让我们继续往下探讨


追根溯源

说到底C语言是外国人创造出来的么,那人家肯定按照他们好理解的方式来进行书写的。比如说上面的:
int (*test2)();用英语表达为:

test2 is pointer to function returning int

翻译成中文就是: test2是 指向将要返回int类型值的函数的指针

好达成我们理解的效果了


总结规律

  • 首先着眼于标识符(变量名或者函数名)。
  • 从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针、数
    组和函数)。优先顺序说明如下,
    ①用于整理声明内容的括弧
    ②用于表示数组的 [] ,用于表示函数的 ()
    ③用于表示指针的 *
  • 解释完成派生类型,使用“ of ”、“ to ”、“ returning ”将它们连接起来。
  • 最后,追加数据类型修饰符(在左边, int 、 double 等)。
  • 英语不好的人,可以倒序用中文解释

PS:(上面这段总结出自《征服C指针》3.1.2节,本文实际上是对该文的观后感悟和学习总结)
这不是抄…这不是抄…用牛顿大哥的话叫站在巨人的肩膀上…不管你信不信反正我信了-.-!

应用一下看看:
int ( * func_p)(double);
首先着眼于标识符。

int ( * func_p)(double);
英语的表达为:
func_p is

因为存在括号,这里着眼于* 。
int ( * func_p)(double);
英语的表达为:
func_p is pointer to

解释用于函数的 () ,参数是 double 。
int ( * func_p)(double);
英语的表达为:
func_p is pointer to function( double ) returning

最后,解释数据类型修饰符 int 。
int ( * func_p)(double);
英语的表达为:
func_p is pointer to function( double ) returning int


0 0