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语言中,还可以使用动态内存分配来创建数组。这通常通过malloc
或calloc
函数实现。
示例:动态分配一维数组
#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)