百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

EasyC++09,C++数组的创建与使用 c ++数组

bigegpt 2024-10-16 07:53 1 浏览

大家好,我是梁唐。

这是EasyC++系列第9篇,我们来聊聊C++中的数组。

想要更好的阅读体验,可以访问github仓库:EasyLeetCode~

数组

数组其实也是一种数据格式,不过是一种复合类型,它可以存储多个同类型的值。

使用数组可以将同类型的变量整合起来管理,比如说我们现在要记录三个同学的考试得分。我们当然可以写成int a1, a2, a3;,看起来也不会很麻烦。但如果我们有 50 个同学呢?如果有 5000 个同学呢?显然就不能通过这种方式了,何况每个变量都要起一个独一无二的名字,这也很麻烦。

使用数组就不会有这样的问题,我们只需要规定数组的长度,通过一个变量就可以存储任意多个值。有 5000 个同学就写成int scores[5000];就都能存下了。

定义一个数组只需要三个要素:变量类型、数组名、数组长度即可。

typename arrayName[arraySize];

有一点需要注意,arrayName的类型不是数组,而是typename数组。也就是说数组也是区分类型的,这也是 C++中的数组和 Python 中 List 的区别之一。

数组的使用

元素访问

对于一个数组来说,当我们需要访问其中的元素时,可以通过下标的方式来访问。

在绝大多数计算机程序当中,数组的下标通常都是从 0 开始的。第一个数存在第 0 位,第二个数存在第 1 位,以此类推。下标通过方括号表示,如:

cout << arrayName[0] << endl;

注意,我们传入的下标不能大于等于数组的长度(由于是从 0 开始的),编译器往往不会报错,只会给出一个警告,但运行的过程当中可能会引发各种意想不到的问题。因为很可能你访问的内存已经超过了程序管理的范围,访问到了一些操作系统内存或者是其他禁止访问的内存,引起难以想象的后果。

int a[3];
cout << a[10] << endl;

在上面的例子当中,我们声明了一个长度为 3 的数组,但是访问了下标 10。这显然超出了数组的范围,但是当我们编译的时候编译器并不会报错,只会抛出一个警告。要知道程序员往往是看不见警告的。

如果一不小心就会错过这个信息,导致潜在的风险。所以在访问之前一定要切记,确保下标在数组的范围内。

初始化

数组和其他变量一样,也可以在声明的时候进行初始化。

最常见的方式是将它的每一个元素的值写出来:

int a[3] = {0, 1, 2};

编译器会将花括号当中的元素一个一个地填到数组对应的位置当中,花括号当中的元素数量并不一定需要和数组长度相等,如果小于数组长度,那么就会初始化对应数量的元素。

int a[3] = {0, 1};

那么数组 a 的前两位会被初始化成 0 和 1,第三位则不会进行初始化。

如果想要将数组当中所有元素都初始化成 0,则比较特殊,我们只需要写一个 0 即可。

int a[100] = {0};

但只有初始化成 0 的时候可以这么操作,如果传入其他值,则不会生效。

还有一种初始化方式是我们不填数组的长度,而通过初始化的方式让编译器替我们去算:

int a[] = {0, 1, 2, 3, 4};

编译器通过执行初始化知道 a 数组的长度为 5,不过 C++ primer 强烈建议我们不用这么干。因为我们人工数出来的结果可能和编译器不一样(我们会犯错),增加我们 debug 的难度。

C++11 的初始化方式

C++11 当中对于数组的初始化又有了一些新的定义,首先是可以省略等号:

int a[3] {1, 2, 3};

其次花括号内可以留空,这等价于将元素全部设置为 0:

int a[100] = {};
int b[10] {};

列表初始化时禁止缩窄转化,我们在上一篇文章当中讲过:

char cs[4] = {0, 0x3f3f3f3f, 'a', 'z'};  // 禁止,因为0x3f3f3f3f超过了char范围

相关推荐

科氪 | 华硕天选6系列正式发布,搭载满功耗RTX 5060实际到手5999元起

5月19日晚,华硕旗下潮玩新次元游戏本天选6系列正式发布。作为Z世代青年的潮酷游戏装备,天选6系列再一次印证了其出色的综合实力。搭载满功耗RTX5060笔记本电脑GPU的天选6Pro以及天选6皆...

最新历史最低价显卡汇总!低端高端一网打尽

文|宋金戈责编|吕东兴总编|唐迪近期开展的618大促,各个品类尤其是数码科技好物的产品优惠都诚意满满,而作为消费者最关心的大类之一,显卡在最近同样表现不俗——华硕、技嘉等多个品牌,从1660s...

DNF:南山必胜客“败诉”,TX被DD373实锤,谁说玩家只有使用权?

TX和DD373的官司终于落下帷幕,南山必胜客终于中断了传奇。TX这一次被判定败诉。其中关于游戏账号和虚拟财产的问题,最受玩家关注。之前TX所说的:游戏账号不是玩家私有财产,游戏币更不是,只有使用权!...

Switch最新SX OS破解系统发布:可运行国行卡带xci镜像了

本周,TX团队(Team-Xecuter)发布了SXOS自制系统的最新版本,v2.9.5Beta,该版本支持了任天堂最新的V10.0.0和v10.0.1固件,同时改善了兼容性,优化了本地联机的稳定...

神舟战神TX8R5 QHD游戏本电脑今晚开售:2.5K屏+RTX4060,6999元

IT之家4月9日消息,神舟战神TX8R5QHD游戏本电脑今晚12点正式开售,仅有16GB+512GB一个版本可选,售价6999元。神舟战神TX8R5QHD搭载13代酷...

开创第三代手游商业模式《武极天下》推无商城玩法

翻阅游戏论坛与贴吧,大家对网络游戏的一些“坑爹”的设定抱怨不已,不是游戏职业设定不合理,就是游戏太烧钱,在游戏中被碾压的抬不起头,最后从玩游戏变成了被游戏玩,俨然游戏本质完全变味。由巨人移动自主研发并...

真满血Gen5电竞存储神装!佰维X570 Pro天启高速固态硬盘测评

2025一开年,对于存储行业来说,就是速度狂飙的开局。各固态硬盘品牌PCIe5.0SSD纷纷亮相,开启了新一轮的性能PK。在2024年异常活跃的佰维科技,也于CES期间推出了佰维X570PRO...

Kingston FURY Renegade G5评测 最速PCIe5.0固态硬盘诞生

【ZOL中关村在线原创评测】说起KingstonFURYRenegade叛逆者的大名,相信PCDIY玩家都知道这是金士顿高端存储的代名词,尤其是内存产品给人印象尤为深刻。实际上它还有固态硬盘系列...

《武极天下》力挺苹果TestFlight创业界先河

关于革旧鼎新,有人说就像是摸石头过河,在摸索中前行。一场正真的创新改革会带来什么?在数字行业,苹果公司的每一个产品都代表着一个时代的开启,它独立的操作系统、顺应用户需求的体验设计,在十几年时间内收获了...

闪迪至尊超极速移动固态硬盘USB4版评测 超越SSD的三防猛兽

移动固态硬盘,凭借TB级的容量和远超传统移动机械硬盘几倍、十几倍的速度,当仁不让地成为高效移动存储的代名词,为4K/8K超高清内容创作、海量文件备份带来了超乎想象的效率提升。国际知名品牌SanDisk...

RTX5070笔记本有哪些:游戏笔记本电脑哪个牌子好?

RTX5070游戏本,个人其实不是很喜欢,对于新款显卡,要不就考虑RTX5060,要不就考虑12GB显存的RTX5070Ti这样好一些,从RTX5070显卡的游戏本的量,也能看出来,估计5060会更多...

破军天下安装指南详解 游戏安装方法介绍

破军天下游戏怎么正确安装?破军天下安装方法是什么?对于破军天下中的安装问题,今天安趣网小编就为各位玩家小伙伴来好好的讲解下,让我们一起来看看,破军天下怎么正确安装游戏的吧!希望大家喜欢!安卓系统(An...

从高性能轻薄本到硬核电竞本 华硕天选新品解锁全场景体验

来源:环球网【环球网科技综合报道】5月19日,华硕天选多款笔记本新品正式发布。其中,14英寸轻薄全能本标杆华硕天选Air2025正式发布,显卡升级至GeForceRTX5060笔记本电脑GPU...

笔记本无线网卡有哪几种 有必要对其升级吗?

无线网卡是很多朋友购买笔记本时容易忽视的部分,相比较处理器、内存、显卡和硬盘,无线网卡几乎不可选,而且很少有厂商提到自家产品采用的无线网卡型号。大家可能遇到过这种情况:为什么手机可以连接到5Ghz,而...

下班了才发现,你的手机里藏着5个定时炸弹!

各位打工人累了一天终于可以躺平刷手机了吧?且慢!工信部最新通知,有些App比加班还可怕!它们可能正在偷偷收集你的信息,比你的老板还要了解你!今天就让我们一起来扒一扒这些“职场内鬼“,看看你的手机里有没...