C++中的数组详情

目录
  • 1、数组
  • 2、数组的使用
    • 2.1 元素访问
    • 2.2 初始化
  • 3、C++11 的初始化方式

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)

(0)

相关推荐

  • 详解C++数组和数组名问题(指针、解引用)

    目录 一.指针 1.1 指针变量和普通变量的区别 1.2 为什么需要指针 1.3 指针使用三部曲 二.整形.浮点型数组 2.1 数组名其实是特殊的指针 2.2 理解复杂的数组的声明 2.3 数组名a.数组名取地址&a.数组首元素地址&a[0].指向数组首元素的指针*p 2.4 对数组名以及取值符&的理解 三.字符数组数组名 一.指针 1.1 指针变量和普通变量的区别 指针:指针的实质就是个变量,它跟普通变量没有任何本质区别.指针完整的应该叫指针变量,简称为指针. 是指向的意思.指针

  • C++中的数组详情

    目录 1.数组 2.数组的使用 2.1 元素访问 2.2 初始化 3.C++11 的初始化方式 1.数组 数组其实也是一种数据格式,不过是一种复合类型,它可以存储多个同类型的值. 使用数组可以将同类型的变量整合起来管理,比如说我们现在要记录三个同学的考试得分.我们当然可以写成int a1, a2, a3;,看起来也不会很麻烦.但如果我们有 50 个同学呢?如果有 5000 个同学呢?显然就不能通过这种方式了,何况每个变量都要起一个独一无二的名字,这也很麻烦. 使用数组就不会有这样的问题,我们只需

  • C++ vector数组用法及解析

    目录 一.什么是vector数组 二.vector的基本操作 vector数组的初始化 向vector中插入元素 删除元素 遍历数组 利用vector创建动态二维数组 一.什么是vector数组 vector是向量类型 vector数组是可以存放任意数据类型的动态数组 和普通数组类似,可以通过下标对数组中的元素进行引用 二.vector的基本操作 使用vector数组要在头文件中加 #include<vector> vector数组的声明 vector<int> vec;//声明一

  • C++中的数组引用和指针引用

    目录 C++中的数组引用和指针引用 一.引用的本质 二.数组的引用 三.指针的引用 C++中的数组引用和指针引用 一.引用的本质 我们在讲解引用之前需要知道为什么C++中会单独提出引用这个概念,在前面也提到在C++从一定角度上是C语言的升级版,其实引用时和C语言中的指针一样的功能,并且使得语法更加简洁.既然提到和指针功能相同,那么引用的功能其实就是给空间取别名. 代码解析: #define _CRT_SECURE_NO_WARNINGS #include<iostream> using nam

  • C语言编程C++柔性数组结构示例讲解

    目录 绕指柔-柔性数组 柔性数组的特点: 第一个好处是:方便内存释放 第二个好处是:这样有利于访问速度 总结 绕指柔-柔性数组 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的. C99 中,结构体中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员. 柔性数组的特点: 1.结构中的柔性数组成员前面必须至少一个其他成员. 2.sizeof 返回的这种结构大小不包括柔性数组的内存. 3.包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,

  • C语言面试C++二维数组中的查找示例

    目录 二维数组中的查找 面试题3: 暴力遍历 动态基点操作 二维数组中的查找 面试题3: 似题: 我做过这个类似的有杨氏矩阵为背景的,实际上是一样的 暴力遍历 二维数组暴力遍历的话时间复杂度为O(n2) 虽然暴力但是应付学校考试这个就是一把好手 #include<stdio.h> //const 就是因为二维数组是定死的 int search(const int arr[4][4], int num,unsigned int* prow,unsigned int* pcol) { int i

  • C++指针与数组:指针详解

    目录 一. What(什么是指针) 1. 地址初了解 2. 指针概念 3. 指针与指针变量 二. Why(为什么要有指针) 三. How(如何使用指针) 1. 基本定义 2. 取地址操作符 & 3. 解引用操作符 * 4. 结构体指针 5. 多级指针 6.指针变量的命名规范 四. 我对指针的一些理解 总结 本文主要介绍C语言中指针的基本概念与用法,本博文从零开始讲解指针,只要你了解基本的C语法,相信你看完本文后一定会有所收获. 一. What(什么是指针) 1. 地址初了解 要搞明白什么是指针,

  • C++数组指针和二维数组详情

    目录 1.二维数组 2.数组指针和二维数组 1.二维数组 对于一维数组,int arr[10]; arr是数组名,也是首元素的地址,&arr是数组的地址,那么对于二维数组 int arr[3][3], arr可以肯定是数组名,那么他是不是首元素的地址呢?如果是首元素的地址,那么arr[0]又该是什么呢?通过以下代码进行验证: #include <stdio.h> #define ROW 3 #define COLUMN 3 int main() { int arr[ROW][COLUM

  • 关于C++数组中重复的数字

    目录 1.题目描述 1.1 方法一:排序 1.2 方法二:哈希表 1.3 方法三:数组位置交换 2.题目升级 2.1 方法一:哈希表 2.2 方法二:辅助数组 2.3 方法三:二分查找 1.题目描述 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组中任意一个重复的数字. 题目示例: 输入:[2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 1.1

  • C++变量,常量,数组和字符串详解

    目录 一.内存和寻址概述 二.变量 1.声明变量 2.变量的作用域 2.1 局部变量 2.2 全局变量 3.c++变量类型 3.1.bool布尔类型 3.2 char字符型 4.常量 总结 一.内存和寻址概述 可编程设备包含微处理器和一定数量的临时存储空间.临时存储器被称为随机存取存储器(RAM). RAM类似于宿舍里成排存物柜的存储区域,每个存物柜都有编号,即地址.要访问特定的内存单元,需要使用指令要求处理器从这里获取值或写入值. 微处理器负责执行应用程序,并从RAM中获取要执行的应用程序以及

随机推荐