在网上遇见felix,他让我读 http://www.felix021.com/blog/read.php?2072,读完之后觉得收获很大,需要练习一下。
黄金法则:从声明的变量名开始,先向右看,再向左看,再向右看,再向左看 。。。
如果向右看的时候遇到 )
,则一直向左看,直到遇到 (
跳出这层括号。然后再重复向右看,向左看。
举例说明:
例子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函数的指针。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。