跳到主要内容

1.2 数组

定义一个数组需要事先确定好类型和容量,数组一旦定义完成后,其容量不可改变。示例:

int array_a[10]; // 定义类型为 int、容量为 10 的数组

上述数组在定义完成后,每个元素不会自动初始化,需要使用 memset 函数快速初始化。例如:

int array_a[10];
memset(array_a, 0, sizeof(array_a)); // 每个元素都赋值为 0

也可以在定义数组的同时对其进行赋值,例如:

int array_a[10] = {1, 2, 3, 4}; // 定义类型为 int、容量为 10 的数组,并赋值前 4 个元素

这种方式会将后续未赋值的元素,会填充为该数据类型的默认值。例如 int 的默认值为 0。

若定义数组的同时进行了赋值,则可不对数组的容量进行定义,即使用赋值的数量作为容量,例如:

int array_a[] = {1, 2, 3, 4}; // 定义类型为 int 的数组,并赋值了 4 个元素,于是该数组容量为 4

也可以声明为全局变量,全局变量会自动初始化

int cache[10]; // 这样声明,会自动将每个元素初始化为类型默认值

int main() {
return 0;
}
相关代码
#include <stdio.h>

int main() {
int array_a[10]; // 定义类型为 int、容量为 10 的数组
printf("array_a 的容量为:%lu\n", sizeof(array_a) / sizeof(array_a[0]));

int size = 114;
int array_b[size]; // 定义类型为 int、容量大小等于变量 size 的数组
printf("array_b 的容量为:%lu\n", sizeof(array_b) / sizeof(array_b[0]));
size = 514;
printf("更改了变量 size 的值后,array_b 的容量为:%lu\n", sizeof(array_b) / sizeof(array_b[0])); // 数组一旦定义完成,其容量不可改变

return 0;
}

输出:

/Users/madray/Documents/JetBrains/CLion/CTest/cmake-build-debug/CTest
array_a 的容量为:10
array_b 的容量为:114
更改了变量 size 的值后,array_b 的容量为:114

Process finished with exit code 0

1.2.1 数组的引用

直接看例子:

int arr[3] = { 1, 2, 3 };
printf("数组的第三元素为:%d", arr[2]);

需要注意的是,C 语言没有自动的边界检查,当访问了数组索引范围以外的值时,可能产生不可预测的行为:

#include <stdio.h>

int main() {
int arr[5] = { 1, 2, 3, 4, 5 };
printf("数组第六个元素为:%d\n", arr[5]);
return 0;
}

输出:

/Users/madray/Documents/JetBrains/CLion/CTest/cmake-build-debug/CTest
数组第六个元素为:32759

Process finished with exit code 0
相关代码(C)
#include <stdio.h>

int main() {
int array[4] = { 114, 514, 1919, 810 };

for (int i = 0; i < 4; ++i) {
printf("第 %d 个元素的值为 %d\n", i, array[i]);
}

return 0;
}

输出:

/Users/madray/Documents/JetBrains/CLion/CTest/cmake-build-debug/CTest
第 0 个元素的值为 114
第 1 个元素的值为 514
第 2 个元素的值为 1919
第 3 个元素的值为 810

Process finished with exit code 0
相关代码(C++)
#include <iostream>

using namespace std;

int main() {
int array[4] = { 114, 514, 1919, 810 };

cout << "数组 array 的值有:";
for (int item : array) {
cout << item << " ";
}
cout << endl;

return 0;
}

输出:

/Users/madray/Documents/JetBrains/CLion/CPP_Test/cmake-build-debug/CPP_Test
数组 array 的值有:114 514 1919 810

Process finished with exit code 0