做C语言程序经常会遇到变态的声明,学习了msdn上的一篇文章,豁然开朗。
char *( *(*var)() )[10];
^ ^ ^ ^ ^ ^ ^
7 6 4 2 1 3 5
1. var被定义为
2. 一个指向3的指针
3. 一个返回值为4的函数
4. 一个指向5的指针
5. 一个拥有10个变量的一维数组,它6
6. 指向7
7. char类型的值。
连贯起来:var被定义为一个指向一个返回值为一个指向一个拥有10个变量的一维数组,它指向char类型的值的指针的函数的指针。
虽然看不明白了,但是就是这么一个意思。规则为:高优先级先于低优先级,右先于左。
继续阅读文章,内容类似,以此类推,你看看下面的内容是否和文章http://technet.microsoft.com/zh-cn/library/1x82y1z4(v=vs.85).aspx上是一样的。
int *var[5];
int (*var)[5];
long *var(long, long);
long (*var)(long, long);
struct both { int a; char b; } (*var[5])(struct both, struct both);
unsigned int *(* const *name[5][10])(void);
double (*var(double(*)[3]))[3];
union sign { int x; unsigned y; } **var[5][5];