此声明将word 创建为char 的100 元素数组:
+---+
word: | | word[0]
+---+
| | word[1]
+---+
| | word[2]
+---+
...
+---+
| | word[99]
+---+
每个word[i] 存储一个char 值。在 C 中,数组从 0 开始索引,因此对于 N 元素数组,有效索引的范围是 0 到 N-1。您可以在word(元素0 到98)中存储最多 99 个字符的字符串,为字符串终止符留出1 个元素。当然,您也可以存储较短的字符串:
0 1 2 3 4 5 6 7 99
+---+---+---+---+---+---+---+---+ +---+
|'H'|'e'|'l'|'l'|'o'| 0 | ? | ? |...| ? |
+---+---+---+---+---+---+---+---+ +---+
您还可以将多个字符串存储在一个数组中:
0 1 2 3 4 5 6 7 8 9 10 11 99
+---+---+---+---+---+---+---+---+---+---+---+---+ +---+
|'H'|'e'|'l'|'l'|'o'| 0 |'W'|'o'|'r'|'l'|'d'| 0 |...| ? |
+---+---+---+---+---+---+---+---+---+---+---+---+ +---+
或者,您可以存储 100 个不的字符组成一个字符串1。
C 声明语法有些复杂——对象的类型由声明说明符(类型说明符、类型限定符、对齐说明符等)和声明符。
在声明中
char word[100];
char 是类型说明符,word[100] 是声明符。 word 的“数组”被指定为声明符的一部分——如果我们更改类型说明符:
int word[100];
我们现在有一个包含 100 个元素的数组 int。
数组性、指针性和函数性都在声明器中指定:
T a[N]; // a is an N-element array of T
T *p; // p is a pointer to T
T f(); // f is a function returning T
其中T 代表类型说明符和限定符的某种组合。数组、指针和函数可以组合成任意复杂的类型:
T *a[N]; // a is an N-element array of pointers to T
T (*a)[N]; // a is a pointer to an N-element array of T
T *(*f())[N]; // f is a function returning a pointer to an N-element array of
// pointers to T
等等。
- 要么是因为你没有存储一个 0 值字符,要么是因为你存储了多个不标记任何结束的 0 值字符。