复杂类型的定义在系统编程时往往是必要的,因此我们需要掌握,至少是理解构造复杂数据类型的基本方法。
变量定义的核心是标识符,解读变量类型要从标识符开始,从内向外,并结合优先级,一步步解读。
1.被()括起来的部分
2.后缀操作符
3.前缀操作符
4.在类型说明符最左端的基本类型或已定义的构造类型
[]和()的优先级高于*的优先级
例子:
1. int *tab[13]
·tab与[]结合,说明是个数组
·再与int *结合,说明数组元素是int指针
·tab是一个包含13个指向int类型指针的数组
2. int (*tabp)[15]
·tabp与*结合,说明是个指针
·再与[]结合,说明指向一个int型数组
·tabp是一个指向包含15个元素的int数组的指针
3. int (*p)(int)
·p与*结合,说明是个指针
·再与()结合,说明指向一个函数,参数类型为int,返回类型为int
·p是一个函数指针
4. char (*fn(int))[8]
·fn与()结合,说明是个函数,参数类型是int
·再与*结合,说明函数返回一个指针
·再与[]结合,说明返回的指针指向一个char型数组
·fn是一个返回指向具有8个char型元素数组指针的函数,参数是int类型
5. int *(*p(int))[3]
·p与()结合,说明是一个函数,返回一个指针
·再与[]几何,说明返回的指针指向一个长度为3的指针数组
·p是一个参数为int,返回一个指向长度为3的指针数组的指针的函数
6. char (*(*fn2(int))[])(double)
·fn2与()结合,说明是一个函数,参数类型为int
·再与*结合,说明函数返回一个指针
·再与[]结合,说明函数返回的指针指向一个数组
·再与*结合,说明函数返回的数组元素是指针
·再与()结合,说明数组元素指针指向一个参数为double,返回为char的函数
·fn2是一个返回函数指针数组的函数,该数组元素指向一个参数int返回char的函数