设为首页 加入收藏

TOP

读懂复杂C声明的黄金法则
2015-07-16 12:57:28 来源: 作者: 【 】 浏览:7
Tags:复杂 声明 黄金 法则

黄金法则:从声明的变量开始,先向右看,再向左看,再向右看,再向左看 。如果向右看的时候遇到),则一直向左看,直到遇到(跳出这层括号。然后再重复向右看,向左看。


举例说明:


例子1


int a;


a 的右边什么都没有,向左看int,说明a是一个int型变量。


例子2


char *a;


向右看,什么都没有; 向左看是*, 说明a是一个指针; 再向右看,什么都没有; 再向左看是char,说明a是一个指向char的指针。


例子3


int *a[];


向右看,[]说明a是一个数组;向左看,*说明数组的每个元素是个指针;再向右看,什么都没有; 再向左看,int,每个指针指向一个整数。综合来看,a是一个数组,数组每个元素指向整数。


例子4


int * const a;


向a右边看,什么都没有。一直向左看,先是const,说明a是不可修改的,然后是*,说明a是一个指针;然后是int,说明指针指向整数。综合来看,a是一个不可修改的指针,它指向整数。


例子5


void (*checkout)();


向右看,遇见)返回,再向左看是*,说明checkout是个指针。再向右看,是(),说明这个指针指向函数; 向左看是void,说明函数返回void。总的来看, checkout是一个指向返回void的函数的指针。


例子6


void (*checkout[])()


向右看,[]说明checkout是一个数组;向左看, *说明数组每个元素是个指针。向右看,遇见)返回;再向左看,遇见(返回。再向右看,是(),说明数组内每个指针指向函数; 向左看是void,说明每个函数返回void。


总的来看, checkout是一个数组,数组内都是指向返回void的函数的指针。


例子7


void (*(*checkout)[])()


向右看,遇见)返回; 向左看,*说明checkout是个指针,遇到(跳出一层()。向右看,[]说明checkout指向的是一个数组;向左看, *说明数组每个元素是个指针。向右看遇见),向左看遇见(,跳出一层()。向右看,()说明数组每个元素指向一个函数;再向左看,void说明每个数组元素指向的函数返回void。


总结:checkout是一个指针,指向一个数组,每个数组元素都是一个指向返回void函数的指针。


据说C++的面向对象和多态就是靠函数指针和函数指针数组实现的。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C标准库函数中复杂的函数声明 下一篇Linux线程的信号量同步

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: