### C语言数组和字符串知识点详解
#### 一、数组概念及特点
- **数组定义**:数组是一种构造数据类型,由一系列相同类型的元素组成。数组中的元素可以通过索引(下标)来唯一标识。
- **数组特点**:
- 数组是有序数据的集合。
- 数组中的所有元素都具有相同的数据类型。
- 数组可以通过统一的数组名和下标来唯一确定其元素。
#### 二、一维数组
- **一维数组定义**:
- 基本格式:`数据类型 数组名[常量表达式];`
- 示例:`int a[10]; float score[5];`
- 其中,“数据类型”指数组元素的数据类型;“数组名”需遵循C语言标识符规则;“常量表达式”表示数组中元素的数量,即数组的长度。
- **正确示例**:
- `#define N 10 ... float score1[N], score2[N]; int num[10+N]; char c[26];`
- **错误示例**:
- `int array(10); int n; float score[n]; double b['a'..'d']; char str[];`
#### 三、数组内存分配
- **内存分配**:
- 数组元素在内存中按照顺序存放,数组名实际上指向数组的第一个元素。
- 内存分配的大小为数组长度乘以元素的数据类型所占用的空间大小。
- 示例:对于`int a[10];`,假设`int`类型的大小为4字节,则总共分配40字节。
#### 四、一维数组的引用
- **引用格式**:
- `数组名[下标表达式]`
- 下标表达式的值必须是整型表达式。
- **示例**:
- 输入学生成绩:`for (i = 0; i < 5; i++) scanf("%f", &score[i]);`
- 计算斐波那契数列:`fib[n] = fib[n - 1] + fib[n - 2];`
#### 五、一维数组的初始化
- **初始化**:在定义数组时,可以给数组元素赋初值。
- 示例:`int a[5] = {0, 1, 2, 3, 4};`
- 如果在初始化时提供了所有元素的值,可以省略数组长度:`int a[] = {0, 1, 2, 3, 4};`
- **部分初始化**:
- 当只给出部分初始值时,剩余未指定的元素自动初始化为0(对于数值类型)或者空字符`\0`(对于字符类型)。
- 示例:`int a[5] = {0, 1, 2}; // a[3] 和 a[4] 的值为 0`
#### 六、一维数组应用示例
- **示例代码**:
```c
#include <stdio.h>
int main() {
int i, a[10];
for (i = 0; i <= 9; i++)
a[i] = i;
for (i = 9; i >= 0; i--)
printf("%d", a[i]);
return 0;
}
```
- **运行结果**:`9876543210`
#### 七、注意事项
- **下标越界**:C编译器不会做越界检查,因此,访问数组时应确保下标在有效范围内。否则可能会导致程序崩溃或其他不可预料的结果。
- **数组名作为地址常量**:数组名实际上代表了数组的首地址,在使用过程中被视为地址常量。
通过以上知识点的总结,我们可以看到C语言中的数组是一种非常实用且功能强大的数据结构。了解并掌握数组的基本概念和使用方法,对于后续学习更复杂的编程技巧和算法有着重要的意义。