百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-10-24 12:32 14 浏览 0 评论

大家好,我是梁唐。

这是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范围

相关推荐

每天一个 Python 库:datetime 模块全攻略,时间操作太丝滑!

在日常开发中,时间处理是绕不开的一块,比如:生成时间戳比较两个时间差转换为可读格式接口传参/前端展示/日志记录今天我们就用一个案例+代码+思维导图,带你完全搞定datetime模块的用法!...

字节跳动!2023全套Python入门笔记合集

学完python出来,已经工作3年啦,最近有很多小伙伴问我,学习python有什么用其实能做的有很多可以提高工作效率增强逻辑思维还能做爬虫网站数据分析等等!!最近也是整理了很多适合零基...

为什么你觉得Matplotlib用起来困难?因为你还没看过这个思维导图

前言Matplotlib是一个流行的Python库,可以很容易地用于创建数据可视化。然而,设置数据、参数、图形和绘图在每次执行新项目时都可能变得非常混乱和繁琐。而且由于应用不同,我们不知道选择哪一个图...

Python新手必看!30分钟搞懂break/continue(附5个实战案例)

一、跳转语句的使命当程序需要提前结束循环或跳过特定迭代时,break和continue就是你的代码急刹按钮和跳步指令。就像在迷宫探险中:break=发现出口立即离开continue=跳过陷阱继续前进二...

刘心向学(24)Python中的数据类(python中5种简单的数据类型)

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来文章“刘心向学(24)Python中的数据类”欢迎您的访问。Shareinterest,...

刘心向学(25)Python中的虚拟环境(python虚拟环境安装和配置)

分享兴趣,传播快乐,增长见闻,留下美好!亲爱的您,这里是LearningYard新学苑。今天小编为大家带来文章“刘心向学(25)Python中的虚拟环境”欢迎您的访问。Shareinte...

栋察宇宙(八):Python 中的 wordcloud 库学习介绍

分享乐趣,传播快乐,增长见识,留下美好。亲爱的您,这里是LearingYard学苑!今天小编为大家带来“Python中的wordcloud库学习介绍”欢迎您的访问!Sharethefun,...

AI在用|ChatGPT、Claude 3助攻,1分钟GET高颜值思维导图

机器之能报道编辑:Cardinal以大模型、AIGC为代表的人工智能浪潮已经在悄然改变着我们生活及工作方式,但绝大部分人依然不知道该如何使用。因此,我们推出了「AI在用」专栏,通过直观、有趣且简洁的人...

使用DeepSeek + Python开发AI思维导图应用,非常强!

最近基于Deepseek+PythonWeb技术开发了一个AI对话自动生成思维导图的应用,用来展示下如何基于低门槛的Python相关技术栈,高效结合deepseek实现从应用场景到实际应用的快速落地...

10幅思维导图告诉你 - Python 核心知识体系

首先,按顺序依次展示了以下内容的一系列思维导图:基础知识,数据类型(数字,字符串,列表,元组,字典,集合),条件&循环,文件对象,错误&异常,函数,模块,面向对象编程;接着,结合这些思维导图主要参考的...

Python基础核心思维导图,让你轻松入门

Python基础核心思维导图【高清图文末获取】学习路线图就给大家看到这里了,需要的小伙伴下方获取获取方式看下方图片...

Python基础核心思维导图,学会事半功倍

Python基础核心思维导图【高清图文末获取】学习路线图就给大家看到这里了,需要的小伙伴下方获取获取方式看下方图片...

硬核!288页Python核心知识笔记(附思维导图,建议收藏)

今天就给大家分享一份288页Python核心知识笔记,相较于部分朋友乱糟糟的笔记,这份笔记更够系统地总结相关知识,巩固Python知识体系。文末获取完整版PDF该笔记学习思维导图:目录内容展示【领取方...

Python学习知识思维导图(高效学习)

Python学习知识思维导图python基础知识python数据类型条件循环列表元组字典集合字符串序列函数面向对象编程模块错误异常文件对象#python##python自学##编程#...

别找了!288页Python核心知识笔记(附思维导图,建议收藏)

今天就给大家分享一份288页Python核心知识笔记,相较于部分朋友乱糟糟的笔记,这份笔记更够系统地总结相关知识,巩固Python知识体系。文末获取完整版PDF该笔记学习思维导图:目录内容展示【领取方...

取消回复欢迎 发表评论: