012. 声明和初始化数组

在C语言中,数组是一种用于存储多个相同类型数据的集合。声明和初始化数组是C语言编程中的基本操作。以下将详细介绍如何声明和初始化数组,包括一维数组和多维数组。

1. 一维数组

1.1 声明一维数组

声明一维数组时,需要指定数组的类型和大小。数组的大小必须是一个正整数,表示数组中可以存储的元素个数。

int arr[5]; // 声明一个包含5个整数的数组

1.2 初始化一维数组

数组可以在声明时初始化,也可以在声明后单独赋值。

在声明时初始化

int arr[5] = {1, 2, 3, 4, 5}; // 声明并初始化一个包含5个整数的数组

如果初始化的元素个数少于数组的大小,剩余的元素将被自动初始化为0。

int arr[5] = {1, 2, 3}; // 声明一个包含5个整数的数组,前3个元素初始化为1, 2, 3,其余元素初始化为0

在声明后初始化

int arr[5];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;
arr[4] = 5;

1.3 访问数组元素

数组元素可以通过下标访问。下标从0开始,即第一个元素的下标是0,第二个元素的下标是1,依此类推。

int value = arr[2]; // 访问数组的第三个元素,值为3

2. 多维数组

2.1 声明多维数组

多维数组可以看作是数组的数组。声明多维数组时,需要指定每个维度的大小。

int matrix[3][4]; // 声明一个3行4列的二维数组

2.2 初始化多维数组

多维数组也可以在声明时初始化,或者在声明后单独赋值。

在声明时初始化

int matrix[3][4] = {
    {1, 2, 3, 4}, // 第一行
    {5, 6, 7, 8}, // 第二行
    {9, 10, 11, 12} // 第三行
};

如果初始化的元素个数少于数组的总大小,剩余的元素将被自动初始化为0。

int matrix[3][4] = {
    {1, 2}, // 第一行
    {3, 4}, // 第二行
    {5, 6}  // 第三行
};
// 剩余的元素将被初始化为0

在声明后初始化

int matrix[3][4];
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[0][3] = 4;
matrix[1][0] = 5;
matrix[1][1] = 6;
matrix[1][2] = 7;
matrix[1][3] = 8;
matrix[2][0] = 9;
matrix[2][1] = 10;
matrix[2][2] = 11;
matrix[2][3] = 12;

2.3 访问多维数组元素

多维数组的元素可以通过多个下标访问。

int value = matrix[1][2]; // 访问第二行第三列的元素,值为7

3. 动态数组

在C语言中,还可以使用动态内存分配来创建数组。这通常通过malloccalloc函数实现。

示例:动态分配一维数组

#include <stdio.h>
#include <stdlib.h>

int main() {
    int size = 5;
    int *arr = (int *)malloc(size * sizeof(int)); // 动态分配内存

    if (arr == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    // 初始化数组
    for (int i = 0; i < size; i++) {
        arr[i] = i + 1;
    }

    // 输出数组元素
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    // 释放内存
    free(arr);

    return 0;
}

示例:动态分配二维数组

#include <stdio.h>
#include <stdlib.h>

int main() {
    int rows = 3, cols = 4;
    int **matrix = (int **)malloc(rows * sizeof(int *)); // 分配行指针

    if (matrix == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    for (int i = 0; i < rows; i++) {
        matrix[i] = (int *)malloc(cols * sizeof(int)); // 分配每行的列
        if (matrix[i] == NULL) {
            printf("Memory allocation failed\n");
            return 1;
        }
    }

    // 初始化数组
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            matrix[i][j] = i * cols + j + 1;
        }
    }

    // 输出数组元素
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    // 释放内存
    for (int i = 0; i < rows; i++) {
        free(matrix[i]);
    }
    free(matrix);

    return 0;
}

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)