奇特的声明

C允许您创建精心定制的数据形式。虽然我们坚持使用较简单的形式,但是我们觉得应该指出这些可能性。当进行一个声明可以添加一个或多个修饰符来修饰名称(或标识符)。

声明时可以使用的修饰符

修饰符 含义
* 表示一个指针
() 表示一个函数
[] 表示一个数组

C允许同时使用多于1个的修饰符,如下

1
2
3
4
5
6
7
8
int board[8][8];    // int数组的数组
int ** ptr; // 指向int的指针的指针
int * risks[10]; // 具有10个元素的数组,每个元素时一个指向int的指针
int (* rusks)[10]; // 一个指针,指向具有10个元素的数组
int * oof[3][4]; // 一个3×4的数组,每个元素时一个指向int的指针
int (* uuf)[3][4]; // 一个指针, 指向一个3×4的数组
int (* uof[3])[4]; // 一个具有3个元素的数组,每个元素时一个指向
// 具有4个元素的int数组指针

修饰符的优先级:[]和()具有相同优先级且比✲优先级高,顺序从左到右。
圆括号可以使修饰符*具有更高优先级
如:

1
int (* uuf)[3][4];   // 一个指针, 指向一个3×4的数组

这些规则同时也产生下面的类型:

1
2
3
char * fump();      // 返回char的指针的函数
char (* frump)(); // 指向返回类型为char的函数的指针
char (* flump[3])(); // 由3个指针组成的数组,每个指针指向返回类型为char的函数

使用typedef建立一系列相关类型

1
2
3
4
5
6
typedef int arr5[5];
typedef arr5 * p_arr5;
typedef p_arr5 arr10[10];
arr5 togs; // togs是具有5个元素的int数组
p_arr5 p2; // p2是一个指针, 指向具有5个元素的int数组
arrp10 ap; // ap是具有10个元素的指针数组,每个指针指向具有5个元素的int数组