news 2026/5/19 17:08:01

C 语言 数组

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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}; // 长度为 4
2.3 访问元素

使用数组名和索引(下标)访问元素:

数组名[索引]

示例:

int arr[3] = {5, 10, 15}; printf("%d", arr[0]); // 输出第一个元素: 5 arr[1] = 20; // 修改第二个元素为 20 printf("%d", arr[2]); // 输出第三个元素: 15
2.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列的元素为10
3.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 10

4. 数组与内存

数组元素在内存中是连续存储的。例如,对于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. 常见错误与注意事项

  1. 索引越界:访问超出数组范围的索引(如arr[5]访问长度为5的数组),可能导致程序崩溃或不可预测行为。
  2. 未初始化:局部数组若未初始化,其元素值为不确定(可能是任意值)。
  3. 数组长度固定:静态数组长度不能在运行时改变。
  4. 数组名不可修改:数组名是常量指针,不能进行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}; // 长度为 4
2.3 访问元素

使用数组名和索引(下标)访问元素:

数组名[索引]

示例:

int arr[3] = {5, 10, 15}; printf("%d", arr[0]); // 输出第一个元素: 5 arr[1] = 20; // 修改第二个元素为 20 printf("%d", arr[2]); // 输出第三个元素: 15
2.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列的元素为10
3.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 10

4. 数组与内存

数组元素在内存中是连续存储的。例如,对于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. 常见错误与注意事项

  1. 索引越界:访问超出数组范围的索引(如arr[5]访问长度为5的数组),可能导致程序崩溃或不可预测行为。
  2. 未初始化:局部数组若未初始化,其元素值为不确定(可能是任意值)。
  3. 数组长度固定:静态数组长度不能在运行时改变。
  4. 数组名不可修改:数组名是常量指针,不能进行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}; // 长度为 4
2.3 访问元素

使用数组名和索引(下标)访问元素:

数组名[索引]

示例:

int arr[3] = {5, 10, 15}; printf("%d", arr[0]); // 输出第一个元素: 5 arr[1] = 20; // 修改第二个元素为 20 printf("%d", arr[2]); // 输出第三个元素: 15
2.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列的元素为10
3.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 10

4. 数组与内存

数组元素在内存中是连续存储的。例如,对于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. 常见错误与注意事项

  1. 索引越界:访问超出数组范围的索引(如arr[5]访问长度为5的数组),可能导致程序崩溃或不可预测行为。
  2. 未初始化:局部数组若未初始化,其元素值为不确定(可能是任意值)。
  3. 数组长度固定:静态数组长度不能在运行时改变。
  4. 数组名不可修改:数组名是常量指针,不能进行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; }

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/19 17:06:01

别再写全表扫描了!四步教你搞定 90% 的慢查询

别再写全表扫描了&#xff01;四步教你搞定 90% 的慢查询 你有没有遇到过这种场景&#xff1a;线上接口突然变慢&#xff0c;用户疯狂投诉&#xff0c;DBA 让你赶紧查 SQL&#xff0c;你盯着 Explain 结果看了半天&#xff0c;依然不知道问题出在哪里&#xff1f;别慌&#xff…

作者头像 李华
网站建设 2026/5/19 17:03:06

终极指南:5步掌握MPh,让COMSOL仿真效率提升300%

终极指南&#xff1a;5步掌握MPh&#xff0c;让COMSOL仿真效率提升300% 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh MPh&#xff08;Pythonic scripting interface for Comsol Multip…

作者头像 李华
网站建设 2026/5/19 17:01:24

FinalShell的下载安装使用教程

FinalShell的下载安装使用教程 在浏览器输入 FinalShell官网双击打开安装包点击安装即可 如何使用 双击FinalShell双击ai_node2&#xff0c;进入下图模式则成功

作者头像 李华
网站建设 2026/5/19 17:01:14

龙芯2K3000与国产OS在轨道交通AFC系统中的工程实践

1. 项目概述&#xff1a;当国产芯遇上城市动脉每天早晚高峰&#xff0c;地铁站里人头攒动&#xff0c;闸机开合的“嘀嘀”声此起彼伏。你可能没留意&#xff0c;支撑这套庞大自动售检票系统&#xff08;AFC&#xff09;稳定运行的“大脑”&#xff0c;正经历一场静默而深刻的变…

作者头像 李华
网站建设 2026/5/19 17:00:37

origin已停止工作怎么解决呢

已解决&#xff01;&#xff01;&#xff01; 尝试过更改管理员打开权限、删除系统字体等均不行。 后面问的AI&#xff0c;说可能是VC的版本太低&#xff0c;不兼容了&#xff0c;核对了一下版本的确是需要重新下载安装&#xff0c;于是在Microsoft Build 2026网页下载了最新…

作者头像 李华
网站建设 2026/5/19 16:59:53

基于YOLOv5的AI视觉瞄准系统:从理论到实践的深度解析

基于YOLOv5的AI视觉瞄准系统&#xff1a;从理论到实践的深度解析 【免费下载链接】AI-Aimbot Worlds Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Aimbot 在计算机视觉和游戏技术融合的前沿领域&#…

作者头像 李华