学习 C 语言中的数组,包括其概念、声明、初始化、访问、多维数组以及常见注意事项。
1. 数组的基本概念
数组是一种用于存储固定数量、相同类型数据元素的数据结构。数组中的元素在内存中是连续存储的。数组中的每个元素可以通过一个索引(下标)来访问。
- 元素(Element):数组中存储的每个数据项。
- 索引(Index):用于访问数组中特定元素的位置标识符。C 语言中数组的索引从0开始。
- 长度(Length):数组可以容纳的元素个数。数组一旦声明,其长度通常是固定的。
2. 一维数组
2.1 声明
声明数组需要指定元素的类型、数组名以及数组的大小(用方括号[]括起来)。
数据类型 数组名[数组长度];示例:
int scores[5]; // 声明一个可以存储 5 个整数的数组 float temperatures[10]; // 声明一个可以存储 10 个浮点数的数组 char name[20]; // 声明一个可以存储 20 个字符的数组(常用于字符串)2.2 初始化
可以在声明数组的同时为其元素赋初值。
// 方式一:完全初始化 int numbers[5] = {10, 20, 30, 40, 50}; // 方式二:部分初始化(剩余元素自动初始化为 0) int partial[5] = {1, 2}; // [1, 2, 0, 0, 0] // 方式三:省略长度(编译器根据初始化列表确定长度) int autoSize[] = {1, 3, 5, 7}; // 长度为 42.3 访问元素
使用数组名和索引(下标)访问元素:
数组名[索引]示例:
int arr[3] = {5, 10, 15}; printf("%d", arr[0]); // 输出第一个元素: 5 arr[1] = 20; // 修改第二个元素为 20 printf("%d", arr[2]); // 输出第三个元素: 152.4 遍历数组
通常使用for循环遍历数组:
int arr[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); // 输出: 1 2 3 4 5 }3. 多维数组
C 语言支持多维数组,最常见的是二维数组(矩阵)。
3.1 二维数组的声明与初始化
数据类型 数组名[行数][列数];示例:
int matrix[2][3]; // 2行3列的整数矩阵 // 初始化 int matrix2[2][3] = { {1, 2, 3}, // 第0行 {4, 5, 6} // 第1行 };3.2 访问二维数组元素
使用两个索引:行索引和列索引。
数组名[行索引][列索引]示例:
int value = matrix2[0][1]; // 获取第0行第1列的元素: 2 matrix2[1][2] = 10; // 修改第1行第2列的元素为103.3 遍历二维数组
使用嵌套循环:
for (int i = 0; i < 2; i++) { // 行 for (int j = 0; j < 3; j++) { // 列 printf("%d ", matrix2[i][j]); } printf("\n"); } // 输出: // 1 2 3 // 4 5 104. 数组与内存
数组元素在内存中是连续存储的。例如,对于int arr[3]:
地址: 0x1000: arr[0] 地址: 0x1004: arr[1] (int 类型通常占4字节) 地址: 0x1008: arr[2]5. 数组与指针的关系
数组名本质上是指向数组首元素的指针常量。
int arr[3] = {10, 20, 30}; int *ptr = arr; // ptr 指向 arr[0] printf("%d", *ptr); // 输出: 10 printf("%d", *(ptr + 1)); // 输出: 20 (等价于 arr[1])6. 动态数组(堆内存分配)
静态数组长度在编译时固定。若需要运行时确定长度,需使用动态内存分配(malloc,calloc):
#include <stdlib.h> int main() { int n = 5; int *dynamicArr = (int *)malloc(n * sizeof(int)); // 分配5个int的空间 if (dynamicArr != NULL) { for (int i = 0; i < n; i++) { dynamicArr[i] = i * 2; } free(dynamicArr); // 释放内存 } return 0; }7. 常见错误与注意事项
- 索引越界:访问超出数组范围的索引(如
arr[5]访问长度为5的数组),可能导致程序崩溃或不可预测行为。 - 未初始化:局部数组若未初始化,其元素值为不确定(可能是任意值)。
- 数组长度固定:静态数组长度不能在运行时改变。
- 数组名不可修改:数组名是常量指针,不能进行
arr++等操作。
8. 示例:数组求和
#include <stdio.h> int main() { int arr[] = {3, 7, 2, 9, 5}; int sum = 0; int length = sizeof(arr) / sizeof(arr[0]); // 计算数组长度 for (int i = 0; i < length; i++) { sum += arr[i]; } printf("数组元素之和: %d\n", sum); // 输出: 26 return 0; }通过以上内容,你应该对 C 语言数组有了全面的理解。如有疑问,请随时提出!
好的,我们将系统地学习 C 语言中的数组,包括其概念、声明、初始化、访问、多维数组以及常见注意事项。
1. 数组的基本概念
数组是一种用于存储固定数量、相同类型数据元素的数据结构。数组中的元素在内存中是连续存储的。数组中的每个元素可以通过一个索引(下标)来访问。
- 元素(Element):数组中存储的每个数据项。
- 索引(Index):用于访问数组中特定元素的位置标识符。C 语言中数组的索引从0开始。
- 长度(Length):数组可以容纳的元素个数。数组一旦声明,其长度通常是固定的。
2. 一维数组
2.1 声明
声明数组需要指定元素的类型、数组名以及数组的大小(用方括号[]括起来)。
数据类型 数组名[数组长度];示例:
int scores[5]; // 声明一个可以存储 5 个整数的数组 float temperatures[10]; // 声明一个可以存储 10 个浮点数的数组 char name[20]; // 声明一个可以存储 20 个字符的数组(常用于字符串)2.2 初始化
可以在声明数组的同时为其元素赋初值。
// 方式一:完全初始化 int numbers[5] = {10, 20, 30, 40, 50}; // 方式二:部分初始化(剩余元素自动初始化为 0) int partial[5] = {1, 2}; // [1, 2, 0, 0, 0] // 方式三:省略长度(编译器根据初始化列表确定长度) int autoSize[] = {1, 3, 5, 7}; // 长度为 42.3 访问元素
使用数组名和索引(下标)访问元素:
数组名[索引]示例:
int arr[3] = {5, 10, 15}; printf("%d", arr[0]); // 输出第一个元素: 5 arr[1] = 20; // 修改第二个元素为 20 printf("%d", arr[2]); // 输出第三个元素: 152.4 遍历数组
通常使用for循环遍历数组:
int arr[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); // 输出: 1 2 3 4 5 }3. 多维数组
C 语言支持多维数组,最常见的是二维数组(矩阵)。
3.1 二维数组的声明与初始化
数据类型 数组名[行数][列数];示例:
int matrix[2][3]; // 2行3列的整数矩阵 // 初始化 int matrix2[2][3] = { {1, 2, 3}, // 第0行 {4, 5, 6} // 第1行 };3.2 访问二维数组元素
使用两个索引:行索引和列索引。
数组名[行索引][列索引]示例:
int value = matrix2[0][1]; // 获取第0行第1列的元素: 2 matrix2[1][2] = 10; // 修改第1行第2列的元素为103.3 遍历二维数组
使用嵌套循环:
for (int i = 0; i < 2; i++) { // 行 for (int j = 0; j < 3; j++) { // 列 printf("%d ", matrix2[i][j]); } printf("\n"); } // 输出: // 1 2 3 // 4 5 104. 数组与内存
数组元素在内存中是连续存储的。例如,对于int arr[3]:
地址: 0x1000: arr[0] 地址: 0x1004: arr[1] (int 类型通常占4字节) 地址: 0x1008: arr[2]5. 数组与指针的关系
数组名本质上是指向数组首元素的指针常量。
int arr[3] = {10, 20, 30}; int *ptr = arr; // ptr 指向 arr[0] printf("%d", *ptr); // 输出: 10 printf("%d", *(ptr + 1)); // 输出: 20 (等价于 arr[1])6. 动态数组(堆内存分配)
静态数组长度在编译时固定。若需要运行时确定长度,需使用动态内存分配(malloc,calloc):
#include <stdlib.h> int main() { int n = 5; int *dynamicArr = (int *)malloc(n * sizeof(int)); // 分配5个int的空间 if (dynamicArr != NULL) { for (int i = 0; i < n; i++) { dynamicArr[i] = i * 2; } free(dynamicArr); // 释放内存 } return 0; }7. 常见错误与注意事项
- 索引越界:访问超出数组范围的索引(如
arr[5]访问长度为5的数组),可能导致程序崩溃或不可预测行为。 - 未初始化:局部数组若未初始化,其元素值为不确定(可能是任意值)。
- 数组长度固定:静态数组长度不能在运行时改变。
- 数组名不可修改:数组名是常量指针,不能进行
arr++等操作。
8. 示例:数组求和
#include <stdio.h> int main() { int arr[] = {3, 7, 2, 9, 5}; int sum = 0; int length = sizeof(arr) / sizeof(arr[0]); // 计算数组长度 for (int i = 0; i < length; i++) { sum += arr[i]; } printf("数组元素之和: %d\n", sum); // 输出: 26 return 0; }通过以上内容,你应该对 C 语言数组有了全面的理解。如有疑问,请随时提出!
好的,我们将系统地学习 C 语言中的数组,包括其概念、声明、初始化、访问、多维数组以及常见注意事项。
1. 数组的基本概念
数组是一种用于存储固定数量、相同类型数据元素的数据结构。数组中的元素在内存中是连续存储的。数组中的每个元素可以通过一个索引(下标)来访问。
- 元素(Element):数组中存储的每个数据项。
- 索引(Index):用于访问数组中特定元素的位置标识符。C 语言中数组的索引从0开始。
- 长度(Length):数组可以容纳的元素个数。数组一旦声明,其长度通常是固定的。
2. 一维数组
2.1 声明
声明数组需要指定元素的类型、数组名以及数组的大小(用方括号[]括起来)。
数据类型 数组名[数组长度];示例:
int scores[5]; // 声明一个可以存储 5 个整数的数组 float temperatures[10]; // 声明一个可以存储 10 个浮点数的数组 char name[20]; // 声明一个可以存储 20 个字符的数组(常用于字符串)2.2 初始化
可以在声明数组的同时为其元素赋初值。
// 方式一:完全初始化 int numbers[5] = {10, 20, 30, 40, 50}; // 方式二:部分初始化(剩余元素自动初始化为 0) int partial[5] = {1, 2}; // [1, 2, 0, 0, 0] // 方式三:省略长度(编译器根据初始化列表确定长度) int autoSize[] = {1, 3, 5, 7}; // 长度为 42.3 访问元素
使用数组名和索引(下标)访问元素:
数组名[索引]示例:
int arr[3] = {5, 10, 15}; printf("%d", arr[0]); // 输出第一个元素: 5 arr[1] = 20; // 修改第二个元素为 20 printf("%d", arr[2]); // 输出第三个元素: 152.4 遍历数组
通常使用for循环遍历数组:
int arr[5] = {1, 2, 3, 4, 5}; for (int i = 0; i < 5; i++) { printf("%d ", arr[i]); // 输出: 1 2 3 4 5 }3. 多维数组
C 语言支持多维数组,最常见的是二维数组(矩阵)。
3.1 二维数组的声明与初始化
数据类型 数组名[行数][列数];示例:
int matrix[2][3]; // 2行3列的整数矩阵 // 初始化 int matrix2[2][3] = { {1, 2, 3}, // 第0行 {4, 5, 6} // 第1行 };3.2 访问二维数组元素
使用两个索引:行索引和列索引。
数组名[行索引][列索引]示例:
int value = matrix2[0][1]; // 获取第0行第1列的元素: 2 matrix2[1][2] = 10; // 修改第1行第2列的元素为103.3 遍历二维数组
使用嵌套循环:
for (int i = 0; i < 2; i++) { // 行 for (int j = 0; j < 3; j++) { // 列 printf("%d ", matrix2[i][j]); } printf("\n"); } // 输出: // 1 2 3 // 4 5 104. 数组与内存
数组元素在内存中是连续存储的。例如,对于int arr[3]:
地址: 0x1000: arr[0] 地址: 0x1004: arr[1] (int 类型通常占4字节) 地址: 0x1008: arr[2]5. 数组与指针的关系
数组名本质上是指向数组首元素的指针常量。
int arr[3] = {10, 20, 30}; int *ptr = arr; // ptr 指向 arr[0] printf("%d", *ptr); // 输出: 10 printf("%d", *(ptr + 1)); // 输出: 20 (等价于 arr[1])6. 动态数组(堆内存分配)
静态数组长度在编译时固定。若需要运行时确定长度,需使用动态内存分配(malloc,calloc):
#include <stdlib.h> int main() { int n = 5; int *dynamicArr = (int *)malloc(n * sizeof(int)); // 分配5个int的空间 if (dynamicArr != NULL) { for (int i = 0; i < n; i++) { dynamicArr[i] = i * 2; } free(dynamicArr); // 释放内存 } return 0; }7. 常见错误与注意事项
- 索引越界:访问超出数组范围的索引(如
arr[5]访问长度为5的数组),可能导致程序崩溃或不可预测行为。 - 未初始化:局部数组若未初始化,其元素值为不确定(可能是任意值)。
- 数组长度固定:静态数组长度不能在运行时改变。
- 数组名不可修改:数组名是常量指针,不能进行
arr++等操作。
8. 示例:数组求和
#include <stdio.h> int main() { int arr[] = {3, 7, 2, 9, 5}; int sum = 0; int length = sizeof(arr) / sizeof(arr[0]); // 计算数组长度 for (int i = 0; i < length; i++) { sum += arr[i]; } printf("数组元素之和: %d\n", sum); // 输出: 26 return 0; }