优秀的编程知识分享平台

网站首页 > 技术文章 正文

C语言之数组

nanyue 2025-03-12 18:54:17 技术文章 3 ℃

在C语言中,数组是一种非常重要的数据结构,用于存储一组相同类型的元素。数组可以帮助我们高效地管理大量数据,是C语言编程中不可或缺的工具。下面我们将从基础概念、定义、初始化、访问和常见操作等方面,详细讲解数组。


1.什么是数组?

  • 数组是一种连续的内存块,用于存储多个相同类型的元素。
  • 数组中的每个元素可以通过索引(下标)来访问。
  • 数组的大小在定义时确定,且不能动态改变。

2.数组的定义

在C语言中,数组的定义语法如下:

数据类型 数组名[数组大小];
  • 数据类型:数组中元素的类型,例如int、float、char等。
  • 数组名:数组的名称,遵循标识符的命名规则。
  • 数组大小:数组中元素的个数,必须是一个常量。
  • 示例
int numbers[5]; // 定义一个包含5个整数的数组
float scores[10]; // 定义一个包含10个浮点数的数组
char name[20]; // 定义一个包含20个字符的数组

3.数组的初始化

数组可以在定义时初始化,也可以在定义后逐个赋值。

  • 定义时初始化
int numbers[5] = {1, 2, 3, 4, 5}; // 完全初始化
int numbers[5] = {1, 2}; // 部分初始化,未初始化的元素默认为0
int numbers[] = {1, 2, 3, 4, 5}; // 省略数组大小,编译器自动推断
  • 定义后赋值
int numbers[5];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;

4.访问数组元素

数组元素通过索引访问,索引从0开始,到数组大小-1结束。

  • 语法
数组名[索引];
  • 示例
int numbers[5] = {10, 20, 30, 40, 50};
printf("%d\n", numbers[0]); // 输出:10
printf("%d\n", numbers[2]); // 输出:30
numbers[3] = 100; // 修改第4个元素的值

5.数组的遍历

遍历数组是指依次访问数组中的每个元素。通常使用for循环来实现。

  • 示例
int numbers[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
    printf("%d ", numbers[i]);
}
// 输出:10 20 30 40 50

6.多维数组

C语言支持多维数组,最常见的是二维数组(矩阵)。

  • 二维数组的定义
数据类型 数组名[行数][列数];
  • 示例
int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
  • 二维数组的访问
printf("%d\n", matrix[1][2]); // 输出:6
  • 二维数组的遍历
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 3; j++) {
        printf("%d ", matrix[i][j]);
    }
    printf("\n");
}
// 输出:
// 1 2 3
// 4 5 6
// 7 8 9

7.数组的常见操作

  • 计算数组长度

可以使用sizeof运算符计算数组的长度:

int numbers[] = {1, 2, 3, 4, 5};
int length = sizeof(numbers) / sizeof(numbers[0]);
printf("数组长度:%d\n", length); // 输出:5
  • 数组作为函数参数

数组可以作为函数参数传递,通常需要同时传递数组的大小。

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);
    return 0;
}

8.数组的注意事项

  1. 索引越界

访问数组时,索引不能超出数组的范围,否则会导致未定义行为。

例如:

int numbers[5] = {1, 2, 3, 4, 5};
printf("%d\n", numbers[5]); // 错误:索引越界


  1. 数组名是常量指针

数组名表示数组的首地址,是一个常量指针,不能修改。

例如:

int numbers[5];
numbers = NULL; // 错误:数组名是常量,不能修改
  1. 数组的大小必须是常量

在标准C语言中,数组的大小必须是编译时常量。

例如:

int size = 5;
int numbers[size]; // 错误:size 不是常量(C99之前)

9.总结

  • 数组:用于存储一组相同类型的元素,通过索引访问。
  • 定义:数据类型 数组名[大小];
  • 初始化:可以在定义时初始化,也可以逐个赋值。
  • 遍历:使用for循环遍历数组。
  • 多维数组:常见的是二维数组,用于表示矩阵。
  • 注意事项:避免索引越界,数组名是常量指针。
最近发表
标签列表