c语言数组

1. 数组的定义与初始化

数组在使用前需要先定义,其定义方式为指定元素类型、数组名以及元素个数。下面是几种常见的数组定义和初始化方式:

// 定义一个包含5个整数的数组
int numbers[5];

// 初始化数组
int primes[5] = {2, 3, 5, 7, 11};  // 完全初始化
int squares[5] = {1, 4, 9};        // 部分初始化,剩余元素自动设为0
int zeros[5] = {0};                // 所有元素初始化为0

// 通过初始化器自动确定数组长度
int values[] = {10, 20, 30, 40};   // 数组长度为4

2. 数组元素的访问

数组元素可以通过下标来访问,C 语言数组的下标是从 0 开始的。例如:

int numbers[5] = {10, 20, 30, 40, 50};

// 访问数组元素
printf("%d\n", numbers[0]);  // 输出:10
printf("%d\n", numbers[3]);  // 输出:40

// 修改数组元素
numbers[2] = 300;
printf("%d\n", numbers[2]);  // 输出:300

3. 多维数组

C 语言支持多维数组,最常见的是二维数组,它常被用来表示矩阵。

// 定义一个3行4列的二维数组
int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

// 访问二维数组元素
printf("%d\n", matrix[1][2]);  // 输出:7

// 使用嵌套循环遍历二维数组
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        printf("%d ", matrix[i][j]);
    }
    printf("\n");
}

4. 数组作为函数参数

在 C 语言中,数组作为参数传递给函数时,会退化为指针。

// 函数声明,接收一个整型数组和数组长度
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);  // 传递数组和数组长度
    return 0;
}

5. 字符数组与字符串

在 C 语言中,字符串是用字符数组来表示的,并且以空字符'\0'结尾。

// 定义字符串的两种方式
char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello";  // 自动添加'\0'

// 字符串处理函数示例
#include <string.h>

int len = strlen(str2);  // 计算字符串长度
char dest[10];
strcpy(dest, str2);     // 复制字符串
strcat(dest, " World"); // 连接字符串

printf("%s\n", dest);   // 输出:Hello World

6. 数组越界问题

在访问数组时,要确保使用的下标在有效范围内(0 到 数组长度 - 1),否则会引发未定义行为。

int arr[3] = {1, 2, 3};
printf("%d\n", arr[3]);  // 错误:越界访问,可能导致程序崩溃

7. 数组与指针的关系

数组名在多数表达式中会被转换为指向数组首元素的指针。

int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;  // 等价于 int *ptr = &arr[0];

printf("%d\n", *ptr);      // 输出:1
printf("%d\n", *(ptr + 2)); // 输出:3,等价于 arr[2]

8. 常见错误与注意事项

  • 数组长度必须是编译时常量表达式。
int n = 5;
int arr[n];  // C99之前不允许,C99引入了可变长度数组(VLA)

  • 数组作为函数参数时,无法直接获取数组长度,需额外传递长度参数。
  • 字符数组处理字符串时,要确保有足够空间存储空字符'\0'
posted @ 2025-06-27 13:00  RaLi  阅读(2)  评论(0)    收藏  举报  来源