跳至内容
响水凹
欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki
用户工具
登录
站点工具
搜索
工具
显示页面
过去修订
反向链接
最近更改
媒体管理器
网站地图
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
computer:c:tips:complicated_type
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
====== 复杂类型声明的分析 ====== C语言的类型声明可以很简单,如仅仅声明一个int变量、指向int的指针、int数组等。也可以将这些简单类型组合起来构成很复杂的类型。 要分析这些复杂声明,关键是记住优先级: * 函数(function)和数组(array)比指针(pointer)有更高的优先级; * 可以使用括号(parentheses)来改变优先级。 <note> 括号的嵌套层次是有限的,早期的C编译器允许最多6层嵌套,标准C扩大到至少支持12层嵌套。 </note> 示例: <code c> int (*ary[5])(); </code> 根据优先级,ary是一个有5个元素的数组,每个元素是一个函数指针,该函数的返回值类型是int。 对于更复杂的类型,最好用typedef来简化定义。 例如: <code c> int *(*(*(*x)())[10])(); </code> 我们先从里向外进行分析: - (*x),x是一个指针,我们暂称为A指针,为便于分析,我们接下来将这块声明用A代替; - (*A()),A指针是一个函数指针,该函数返回值类型为B指针,同理我们接下来将这块声明用B代替; - (*B[10]),B指针是一个指向10个元素数组的指针,每个元素的类型是C指针,我们接下来将这块声明用C代替; - int *C(),C指针是一个函数指针,该函数返回值类型是int指针。 综上,x是一个函数指针,该函数的返回值类型是一个指向10个元素数组的指针,每个数组元素又是一个函数指针,对应函数的返回值类型是int指针。 虽然总能分析出来,但合理使用typedef,结果会清晰很多: <code c> typedef int *(*print_function_ptr)(); typedef print_function_ptr (*digit_routines)[10]; digit_routines (*x)(); </code> {{tag>C语言}}
computer/c/tips/complicated_type.txt
· 最后更改: 2014/11/01 02:02 由
127.0.0.1
页面工具
显示页面
过去修订
反向链接
回到顶部