C语言描述变量类型
方法:
先来看一个变量的声明:
int (*(*a)())[6];
大家会不会觉得这个有问题呢?可以通过编译哦。
好了,现在开始上干货
一个声明可以这样表示:
类型 表达式;
方法:通过计算表达式来确定类型。变量经过表达式的运算,得到了声明前面的类型,以此,来推断变量类型。
是不是还是一脸懵,从简单的开始
int a;//这个声明没啥好说的
int *a;// 表达式是*a,通过*a(间接引用),得到了int型,所以a是一个整型指针
int **a;//经过两次间接引用,所以a是二级指针
int *a();//声明函数
把()当作函数调用,很显然,a就是一个函数
int (*a)();
先间接访问引用a,然后调用函数,得到整型,所以a是一个“返回值为整型的函数的函数指针”
int **(*a[6])();
a是一个指针数组,然后经过调用函数,返回二级指针,所以a的类型描述为“a是指向返回值为二级指针的函数指针数组”
int (*(*a)())[6];
a是一个函数指针,返回的值经过间接引用之后是一个整型数组,所以a的类型描述为“a是指向返回值为int型数组的指针的函数指针”