1.什么是声明器
在指针与多维数组那一节中,我们讨论了声明一个数组与指针的通用公式。
声明数组与指针的通用公式:
现在我们声明两个数组A、B。根据它们的声明来展开对声明的讨论。
声明数组A:
数组A,它有10个元素,每个元素为int
类型。
- 元素类型:int
- 数组名:A
- 元素个数:10
按照公式,我们写出如下形式的声明:
int A[10];
声明数组B:
数组B,它有5个元素,每个元素为int [10]
类型的数组。
- 元素类型:int[10]
- 数组名:B
- 元素个数:5
按照公式,我们写出如下形式的声明:
int[10] B[5];
接下来,把元素类型中的方括号移动到最右边。
int B[5][10];
这样我们就写好了这两个数组的声明了。
数组A的声明为:int A[10]
数组B的声明为:int B[5][10]
像这种提供标识符与类型信息,用于声明一个标识符的语法被称作声明器。
2.声明与使用形式统一
现在,你肯定会有一个疑问,为什么在C语言中声明一个数组的写法会这么奇怪呢?
既然声明器由标识符与类型信息组成。为什么不把它们分开写呢?像下面这样写不好吗?
数组A的声明为:int[10] A
数组B的声明为:int[5][10] B
前面是类型信息,后面是标识符。这样写看起来好像更加清晰明了。
但是,C语言中并未采用这样写法的是有一个其他方面的考虑的。
C语言的设计者们希望:一个标识符的声明与使用的形式统一。
那么,什么叫作声明与使用的形式统一呢?根据下面的三个例子,相信你立刻就能理解何为形式统一。
数组A的声明为:int A[10]
数组A的使用:int n = A[0]
数组B的声明为:int B[5][10]
数组B的使用:int n = B[1][2]
标识符id声明为:int *(*id)[4]
标识符id使用为:int n = *(*id)[0]
标识符声明中的方括号内填数组长度,而标识符使用中的方括号内填元素下标。 标识符使用的表达式最终结果的类型与声明的最左边的类型一致。
这样看来,是不是声明器语法还是有法可依了呢。