跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
C 语言数组操作
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= C语言数组操作 = == 介绍 == '''数组'''是C语言中一种重要的数据结构,用于存储相同类型的多个元素。数组操作包括创建、初始化、访问、修改、遍历以及多维数组的处理。掌握数组操作是学习C语言的关键步骤之一,因为数组广泛应用于数据处理、算法实现和内存管理等领域。 数组的特点: * 元素类型相同 * 内存连续分配 * 通过索引(下标)访问 * 大小固定(静态数组) == 数组声明与初始化 == === 一维数组 === 一维数组的声明语法: <syntaxhighlight lang="c"> 数据类型 数组名[数组大小]; </syntaxhighlight> 示例: <syntaxhighlight lang="c"> int numbers[5]; // 声明一个包含5个整数的数组 </syntaxhighlight> 初始化方式: <syntaxhighlight lang="c"> // 方式1:声明时初始化 int numbers[5] = {1, 2, 3, 4, 5}; // 方式2:部分初始化(剩余元素自动初始化为0) int numbers[5] = {1, 2}; // 方式3:自动确定大小 int numbers[] = {1, 2, 3, 4, 5}; // 编译器自动计算大小为5 </syntaxhighlight> === 多维数组 === C语言支持多维数组,最常见的是二维数组(矩阵)。 声明语法: <syntaxhighlight lang="c"> 数据类型 数组名[行数][列数]; </syntaxhighlight> 示例: <syntaxhighlight lang="c"> int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; </syntaxhighlight> == 基本数组操作 == === 访问数组元素 === 数组元素通过索引访问,索引从0开始。 示例: <syntaxhighlight lang="c"> int numbers[5] = {10, 20, 30, 40, 50}; printf("%d", numbers[2]); // 输出:30 </syntaxhighlight> === 修改数组元素 === <syntaxhighlight lang="c"> numbers[1] = 25; // 将第二个元素改为25 </syntaxhighlight> === 遍历数组 === 使用循环结构遍历数组: <syntaxhighlight lang="c"> for(int i = 0; i < 5; i++) { printf("%d ", numbers[i]); } // 输出:10 25 30 40 50 </syntaxhighlight> == 数组与指针的关系 == 在C语言中,数组名本质上是指向数组第一个元素的指针。 示例: <syntaxhighlight lang="c"> int numbers[3] = {1, 2, 3}; int *ptr = numbers; // ptr指向数组首元素 printf("%d", *ptr); // 输出:1 printf("%d", *(ptr + 1)); // 输出:2 </syntaxhighlight> == 常见数组操作函数 == 虽然C语言没有内置的数组操作函数,但可以自己实现: === 数组复制 === <syntaxhighlight lang="c"> void arrayCopy(int src[], int dest[], int size) { for(int i = 0; i < size; i++) { dest[i] = src[i]; } } </syntaxhighlight> === 数组求和 === <syntaxhighlight lang="c"> int arraySum(int arr[], int size) { int sum = 0; for(int i = 0; i < size; i++) { sum += arr[i]; } return sum; } </syntaxhighlight> == 数组的内存表示 == 数组在内存中是连续存储的。例如,一个包含3个整数的数组: <mermaid> graph LR A[numbers[0]] --> B[numbers[1]] --> C[numbers[2]] </mermaid> 内存地址计算: <math> address\ of\ arr[i] = base\ address + (i \times sizeof(data\ type)) </math> == 实际应用案例 == === 案例1:成绩统计 === 计算学生平均成绩: <syntaxhighlight lang="c"> #include <stdio.h> int main() { float grades[5] = {85.5, 90.0, 78.5, 92.5, 88.0}; float sum = 0.0; for(int i = 0; i < 5; i++) { sum += grades[i]; } printf("平均成绩: %.2f\n", sum / 5); return 0; } </syntaxhighlight> 输出: <pre> 平均成绩: 86.90 </pre> === 案例2:矩阵转置 === 实现3x3矩阵的转置: <syntaxhighlight lang="c"> #include <stdio.h> void transpose(int matrix[3][3]) { int temp; for(int i = 0; i < 3; i++) { for(int j = i + 1; j < 3; j++) { temp = matrix[i][j]; matrix[i][j] = matrix[j][i]; matrix[j][i] = temp; } } } int main() { int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; transpose(matrix); // 打印转置后的矩阵 for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } return 0; } </syntaxhighlight> 输出: <pre> 1 4 7 2 5 8 3 6 9 </pre> == 常见错误与注意事项 == 1. '''数组越界''':访问超出数组范围的索引会导致未定义行为 <syntaxhighlight lang="c"> int arr[3] = {1, 2, 3}; printf("%d", arr[3]); // 错误!有效索引是0-2 </syntaxhighlight> 2. '''数组大小必须为常量'''(在标准C中) <syntaxhighlight lang="c"> int size = 5; int arr[size]; // 在C99之前是错误,C99支持变长数组 </syntaxhighlight> 3. '''数组名不是指针'''(虽然可以转换为指针) <syntaxhighlight lang="c"> int arr[5]; printf("%zu", sizeof(arr)); // 输出整个数组的大小,不是指针大小 </syntaxhighlight> == 高级主题 == === 动态数组 === 使用指针和内存分配函数创建动态大小的数组: <syntaxhighlight lang="c"> #include <stdlib.h> int main() { int size = 10; int *dynamicArray = (int*)malloc(size * sizeof(int)); if(dynamicArray != NULL) { for(int i = 0; i < size; i++) { dynamicArray[i] = i * 2; } // 使用数组... free(dynamicArray); // 释放内存 } return 0; } </syntaxhighlight> === 数组作为函数参数 === 数组作为函数参数时,实际上传递的是指向数组第一个元素的指针: <syntaxhighlight lang="c"> void printArray(int arr[], int size) { for(int i = 0; i < size; i++) { printf("%d ", arr[i]); } } // 调用 int numbers[5] = {1, 2, 3, 4, 5}; printArray(numbers, 5); </syntaxhighlight> == 总结 == C语言数组是基础而强大的数据结构,理解数组操作对于掌握C语言编程至关重要。从简单的元素访问到复杂的多维数组处理,数组在各种编程场景中都有广泛应用。记住数组的固定大小特性和指针关系,可以避免许多常见错误。随着编程经验的积累,你会发现在更复杂的数据结构和算法中,数组操作仍然是基础中的基础。 [[Category:编程语言]] [[Category:C]] [[Category:C 语言数组]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)