返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中的数组详情
  • 555
分享到

C++中的数组详情

2024-04-02 19:04:59 555人浏览 八月长安
摘要

目录1、数组2、数组的使用2.1 元素访问2.2 初始化3、c++11 的初始化方式1、数组 数组其实也是一种数据格式,不过是一种复合类型,它可以存储多个同类型的值。 使用数组可以将

1、数组

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

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

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

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


typename arrayName[arraySize];


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

2、数组的使用

2.1 元素访问

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

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

如:


cout << arrayName[0] << endl;

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


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

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

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

2.2 初始化

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

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


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

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


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

那么数组 a 的前两位会被初始化成 0 和 1,其他的位置会被初始化为0。

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


int a[100] = {0};

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

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


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

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

3、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范围

到此这篇关于C++中的数组详情的文章就介绍到这了,更多相关C++中的数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

注:文章转自微信公众号:Coder梁(ID:Coder_LT)

--结束END--

本文标题: C++中的数组详情

本文链接: https://lsjlt.com/news/156279.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中的数组详情
    目录1、数组2、数组的使用2.1 元素访问2.2 初始化3、C++11 的初始化方式1、数组 数组其实也是一种数据格式,不过是一种复合类型,它可以存储多个同类型的值。 使用数组可以将...
    99+
    2024-04-02
  • C++数组的定义详情
    目录1.数组概念2.数组的复杂声明3.数组到指针4.数组操作4.1获取数组元素个数4.2使用for循环遍历数组(C++11开始支持)5.拓展5.1C字符串5.2vector5.3st...
    99+
    2024-04-02
  • C++数组指针和二维数组详情
    目录1、二维数组2、数组指针和二维数组1、二维数组 对于一维数组,int arr[10]; arr是数组名,也是首元素的地址,&arr是数组的地址,那么对于二维数组 int ...
    99+
    2024-04-02
  • JS数组去重详情
    目录1 测试用例2 JS 数组去重4大类型2.1 元素比较型2.1.1 双层 for 循环逐一比较(es5常用)2.1.2 排序相邻比较2.2 查找元素位置型2.2.1 indexO...
    99+
    2024-04-02
  • Python ndarray 数组的变形详情
    目录一、维数的变形1. 一维数组转二维数组以及同维变换2. 二维数组转化维度也可以用这两个函数3. 二维数组转一维数组二、数组的拼接1. 横向拼接2. 纵向拼接三、数组的分割1. 横...
    99+
    2024-04-02
  • C#中的Explicit和Implicit详情
    目录 一、Implicit和Explicit1、Implicit2、、Explicit先上一段奇怪的代码: if (dto.Payment == null) conti...
    99+
    2024-04-02
  • C++中的Switch 语句详情
    在日常的开发当中,我们经常会遇到一种情况,我们用一个变量表示状态。比如关闭-激活-完成,当我们需要判断状态的时候,就需要罗列if-else语句。 if (status == 'c...
    99+
    2024-04-02
  • C++函数的默认参数详情
    文章转自微信 公众号:Coder梁(ID:Coder_LT) C++当中的支持默认参数,如果你学过Python,那么想必对此不会陌生。C++中的默认参数的用法和Python基本一致...
    99+
    2024-04-02
  • C++内联函数详情
    内联函数是C++当中为了提高程序运行效率的设计,老实讲我没有在其他语言当中看到类似的设计。它和常规函数之间的主要区别不在于编写的方式,而是在于C++编译器会将内联函数组合到程序当中...
    99+
    2024-04-02
  • JavaScript中数组reduce()方法使用详情
    语法: reduce()对数组中的每个元素进行累加,返回一个新的值,可以传入初始值简单的讲就是返回数组中所有元素的和数  不会改变原始组的值  不会对空数组执行回...
    99+
    2024-04-02
  • C#中的数组用法详解
    目录一.简单数组(一维数组)1.数组的声明2.数组的初始化3.访问数组元素4.数组中使用引用类型二.多维数组三.锯齿数组四.Array类1.创建数组2.复制数组3.排序五.数组作为参...
    99+
    2024-04-02
  • C++中的友元函数与友元类详情
    目录一、问题背景二、友元函数三、友元类一、问题背景 对类的封装是C++三大特性中的一个重要特性,封装好的数据在类的外部是访问不到的但是一旦出了问题,想要操作被封装的数据怎么办呢?由此...
    99+
    2024-04-02
  • C语言中回调函数的使用详情
    目录1.程序架构2.回调函数的作用3.掌握回调函数的程序编写4.回调函数在产品中的应用下文将学习到; 程序架构的核心理念和需求掌握回调函数的作用掌握回调函数的程序编写掌握回调函数在产...
    99+
    2024-04-02
  • C语言 main 函数详情
    目录1、main()2、void main()3、int main(void)4、int main ()5、int main(int argc,char *argv[])前言: 但...
    99+
    2024-04-02
  • C语言 sizeof 函数详情
    目录一.sizeof 函数简介二.sizeof 函数实战一.sizeof 函数简介 在 C 语言中,char 字符串也是一种非常重要的数据类型,我们除了使用 sizeof 函数获取字...
    99+
    2024-04-02
  • C语言 sprintf 函数详情
    目录一.sprintf 函数简介二.sprintf 函数使用三.sprintf/fprintf/printf 函数区别一.sprintf 函数简介 sprintf 函数用于将格式化的...
    99+
    2024-04-02
  • C++浮点数类型详情
    目录1、浮点数2、关于m3、关于e4、浮点数的使用5、浮点数类型6、注意事项1、浮点数 浮点数是C++的第二组基本类型,它能够表示带小数部分的数字。不仅如此,浮点数的范围也比int更...
    99+
    2024-04-02
  • 三种在ES6中将非数组转换为数组的方法详情
    目录Array.from()类数组对象转换实例类数组对象转换应用含有迭代器对象转换实例Array.from()的第二个参数Array.of()扩展运算符最后前言: 我们常常想使用数组...
    99+
    2022-11-13
    ES6将非数组转换为数组方法 ES6数组转换
  • C# .NET 中的缓存实现详情
    目录一、缓存的基本概念二、缓存三、进程内缓存早期做法四、更好的解决方案1、 Microsoft.Extensions.Caching.Memory 2、具有驱逐策略的 IM...
    99+
    2024-04-02
  • C# 提取PDF中的表格详情
    目录1、简单介绍2、环境配置3、代码示例1、简单介绍 本文介绍在C#程序中(附VB.NET代码)提取PDF中的表格的方法,调用Spire.PDF for .NET提供的提取表格的 类...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作