C语言的顺时针旋转法

具体内容详见 http://c-faq.com/decl/spiral.anderson.html

一种很好用的判断C语言声明时变量语义的方法——螺旋顺时针法

示例#1

char *str[10];

从str出发,顺时针旋转,遇到的第一个部分是"[10]", 说明str是一个10个元素的数组;

继续顺时针旋转,遇到了指针符号'*',说明这是10个元素都是指针;

继续旋转,遇到了"char",说明这些指针是指向char类型变量的。

示例#2

char *(*fp)( int, float *);

变量名是"fp",如上例,顺时针旋转,由于这个变量名是被括号包裹的,所以先遇到的会是*,说明这个变量是一个指针;

接下来遇到了"(int, float *)",说明这个指针指向了一个函数。这是个怎么样的函数呢?继续旋转,遇到了'*',说明返回值是一个指针,这个指针指向的是一个char。

示例#3

void (*signal(int, void (*fp)(int)))(int);

这个例子比较复杂。我们首先来看"signal"是什么。

根据上边的例子可以看出来,"signal"是一个函数,函数的形参类型分别是一个integer和fp。

我们再分析fp是什么类型: 同样根据上边的例子可以看出来, fp是一个指向函数的指针,这个函数接收一个integer返回void。

继续回到"signal",已经知道这是一个函数了,那么这个函数的返回值是多少呢,很明显是一个指针,这个指针是一个指向一个函数的指针。

这个函数接收一个integer,返回void。

这个方法还可以应用在判断const修饰的到底是一个指针还是一个其他类型。

猜你喜欢

转载自www.cnblogs.com/AcodingDg/p/12343347.html