在C语言编程中,数组初始化指的是在定义数组的同时为数组元素赋予初始值,合理的初始化可以避免数组元素出现随机的垃圾值,保证程序运行的稳定性。不同的数组类型和场景对应不同的初始化方法,下面逐一介绍常见的初始化方式。

一、一维数组的初始化方式
1. 完全初始化
完全初始化是指在初始化时给数组的所有元素都指定初始值,此时可以省略数组的长度,编译器会根据初始值的个数自动确定数组大小。
#include <stdio.h>
int main() {
// 完全初始化,指定所有元素的值,省略数组长度
int arr1[] = {1, 2, 3, 4, 5};
// 完全初始化,显式指定数组长度为5
int arr2[5] = {10, 20, 30, 40, 50};
// 打印arr1的元素
printf("arr1元素:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr1[i]);
}
printf("n");
// 打印arr2的元素
printf("arr2元素:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr2[i]);
}
printf("n");
return 0;
}
2. 部分初始化
部分初始化是指初始化时只给数组的前面若干个元素赋值,剩余未赋值的元素会被编译器自动初始化为0(如果是全局数组或静态数组,未赋值元素默认是0;如果是局部数组,未赋值元素也会被初始化为0,这是C99标准的规定)。
#include <stdio.h>
int main() {
// 部分初始化,只给前3个元素赋值
int arr[5] = {1, 2, 3};
printf("部分初始化数组元素:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("n");
return 0;
}
3. 指定元素初始化(C99及以后标准支持)
可以通过数组名[下标] = 值的语法指定某个特定下标的元素进行初始化,未指定的元素同样会被初始化为0。
#include <stdio.h>
int main() {
// 指定下标为2和4的元素初始化
int arr[5] = {[2] = 10, [4] = 20};
printf("指定元素初始化数组元素:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
printf("n");
return 0;
}
二、二维数组的初始化方式
1. 按行完全初始化
二维数组可以按行初始化,每一行的元素用大括号包裹,所有行的初始值再放在一个总的大括号内,同样可以省略第一维的长度,编译器会根据行数自动确定。
#include <stdio.h>
int main() {
// 按行完全初始化,省略第一维长度
int arr1[][3] = {{1, 2, 3}, {4, 5, 6}};
// 按行完全初始化,显式指定第一维长度为2
int arr2[2][3] = {{10, 20, 30}, {40, 50, 60}};
printf("arr1元素:n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr1[i][j]);
}
printf("n");
}
return 0;
}
2. 连续初始化
二维数组在内存中是连续存储的,也可以把所有初始值按顺序放在一个大括号内,编译器会自动按行分配元素,但是这种方式可读性较差,不推荐频繁使用。
#include <stdio.h>
int main() {
// 连续初始化,按顺序给所有元素赋值
int arr[2][3] = {1, 2, 3, 4, 5, 6};
printf("连续初始化数组元素:n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("n");
}
return 0;
}
3. 部分初始化
二维数组同样支持部分初始化,未赋值的元素会被自动初始化为0。
#include <stdio.h>
int main() {
// 部分初始化,只给第一行的前两个元素赋值
int arr[2][3] = {{1, 2}};
printf("二维数组部分初始化元素:n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("n");
}
return 0;
}
三、字符数组的初始化方式
1. 用字符逐个初始化
字符数组可以用单个字符作为初始值,每个字符用单引号包裹,这种方式不会自动在末尾添加字符串结束符