C++中静态数组的声明和初始化

C++中静态数组的声明和初始化

为何需要数组?

假设您要编写一个程序,它让用户输入 5 个整数并显示出来。为此,一种方式是声明 5 个独立的 int 变量,并使用它们来存储和显示值。声明类似于下面这样:

cpp 复制代码
int firstNumber = 0;
int secondNumber = 0;
int thirdNumber = 0;
int fourthNumber = 0;
int fifthNumber = 0;

采用这种方式时,如果用户希望这个程序存储并显示 500 个整数,您将需要声明 500 个 int 变量。只要有足够的耐心和时间,这还是可行的。然而,如果用户要求存储并显示 500000 个整数,您该怎么办呢?

您应采取正确而聪明的方式,声明一个包含 5 个 int 元素的数组,并将每个元素都初始化为零,如下所示:

cpp 复制代码
int myNumbers [5] = {0};

这样,当您被要求支持 500000 个整数时,便可以快速扩大数组,如下所示:

cpp 复制代码
int manyNumbers [500000] = {0};

要定义一个包含 5 个字符的数组,可以这样做:

cpp 复制代码
char myCharacters [5];

这样的数组被称为静态数组,因为在编译阶段,它们包含的元素数以及占用的内存量都是固定的。

声明和初始化静态数组

在前面,您声明了一个名为 myNumbers 的数组,它包含 5 个类型为 int 的元素(即整数),这些元素都被初始化为 0。在 C++中,数组声明遵循如下简单的语法:

cpp 复制代码
ElementType ArrayName [constant_number of elements] = {optional initial values};

在声明数组时,还可像下面这样分别初始化每个元素,这里将 5 个元素分别初始化为不同的整数:

cpp 复制代码
int myNumbers [5] = {34, 56, -21, 5002, 365};

可将数组的所有元素都初始化为 0(编译器给数值类型提供的默认值),如下所示:

cpp 复制代码
int myNumbers [5] = {}; // initializes all integers to 0

也可只初始化部分元素,如下所示:

cpp 复制代码
int myNumbers [5] = {34, 56};  // initialize first two elements to 34 and 56 and the rest to 0

可将数组长度(即数组包含的元素数)定义为常量,并在数组定义中使用该常量:

cpp 复制代码
const int ARRAY_LENGTH = 5;
int myNumbers [ARRAY_LENGTH] = {34, 56, -21, 5002, 365};

需要在多个地方访问并使用数组的长度(如遍历数组中的元素)时,这很有用。这样就无需在每个地方修改数组的长度,而只需修改 const int 声明中的初始值。

如果知道数组中每个元素的初始值,可不指定数组包含的元素数:

cpp 复制代码
int myNumbers [] = {2016, 2052, -525}; // array of 3 elements

上述代码创建一个数组,它包含 3 个 int 元素,这些元素的初始值分别为 2016、2052 和 -525。

注意:

复制代码
前面声明的所有数组都是静态数组,因为它们的长度在编译阶段就已确定。这种数组不能存储更多的数据;同时,即便有部分元素未被使用,它们占据的内存也不会减少。长度在执行阶段确定的数组被称为动态数组,这种数组将在后面进行介绍。

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,

分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,

fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,

TCP/IP,协程,DPDK等技术内容,点击立即学习:

服务器课程:C++服务器

相关推荐
借雨醉东风10 小时前
程序分享--常见算法/编程面试题:旋转矩阵
c++·线性代数·算法·面试·职场和发展·矩阵
云泽80811 小时前
笔试算法 - 双指针篇(二):四大经典求和题型 + 有效三角形计数问题
c++·算法
十五年专注C++开发12 小时前
WaitingSpinnerWidget: 一个高度可配置的自定义Qt等待加载动画组件
开发语言·c++·qt·waitingspinner
qeen8712 小时前
【数据结构】树的基本概念及存储
c语言·数据结构·c++·学习·
王老师青少年编程13 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:种树
c++·算法·贪心·csp·信奥赛·区间贪心·种树
hi_ro_a13 小时前
C++ 哈希表封装 unordered_map /unordered_set
数据结构·c++·算法·哈希算法
c++之路13 小时前
C++ 动态内存
java·jvm·c++
橘颂TA17 小时前
【Linux】读写锁
大数据·linux·开发语言·c++·读写锁
霍田煜熙17 小时前
HuoTian的两赛vlog(游记)~(2026.04.26写)
c++·奥数·双赛·vlog
CoderCodingNo18 小时前
【CSP】CSP-J 2019 江西真题 | 次大值 luogu-P5682 (适合GESP四、五级及以上考生练习)
开发语言·c++·算法