首页 > 编程语言 >C++自学笔记29(多维数组)

C++自学笔记29(多维数组)

时间:2024-07-28 16:26:07浏览次数:10  
标签:int 29 C++ 50 2dArray 数组 多维 new 指针

我们在之前的笔记中知道数组解决了重复变量的赋值问题,也知道数组就是指针可以用指针的方式修改内容。

现在有一个数组对50个变量赋值a[50],我们有50个这样的数组a[50][50],对于这样的数组我们还有50个a[50][50][50]。这就是一维数组、二维数组、三维数组......

我们拿堆上建立二维数组举例子。(堆上建立返回了指针类型方便观看,不知道栈与堆建立的区别以及书写方式移步到笔记25与笔记18

#include<iostream>

int main()
{
    int* Array = new int[50];
    int** 2dArray = new int*[50];
    std::cin.get();
}

 我们看到一维数组是包含了50个int数据类型的指针,也就是分配了50*4字节的内存大小存放整数。

二维数组是包含了50个int*型指针的指针,也就是分配了50*4字节的内存大小存放地址。这样我们就有了50个数组的数组。到此我们仅仅是声明了一个数组的数组,我们来遍历创建它。

#include<iostream>

int main()
{
    //int* Array = new int[50];
    int** 2dArray = new int*[50];
    for(int i=0;i<50;i++)
        2dArray[i] = new int[50];
    std::cin.get();
}

还记得new int[50]返回的是指针,将其循环赋值给 2dArray[i]就完成了二维数组的创建。对内部数组进行赋值实际上是对 2dArray[][]的数据赋值、 2dArray[]表示对指针的赋值也就是50个包含数据的数组我选哪一个。

#include<iostream>

int main()
{
    //int* Array = new int[50];
    int** 2dArray = new int*[50];
    for(int i=0;i<50;i++)
        2dArray[i] = new int[50];

    2dArray[0][0] = 0;
    2dArray[0][1] = 1;
    2dArray[0][2] = 5;
    2dArray[0][3] = 8;

    std::cin.get();
}

以上是对第0个数组的0123位分别赋值0158。代码已经完成了吗?并没有,还记得我们在堆上建立需要自己销毁数组delete。二维怎么操作呢?以下代码是对的吗?

#include<iostream>

int main()
{
    //int* Array = new int[50];
    int** 2dArray = new int*[50];
    for(int i=0;i<50;i++)
        2dArray[i] = new int[50];

    2dArray[0][0] = 0;
    2dArray[0][1] = 1;
    2dArray[0][2] = 5;
    2dArray[0][3] = 8;

    delete[] 2dArray ;
    std::cin.get();
}

我们知道3dArray 数组有三层从左到右是“”数组的指针的指针”“数组的指针”“数组”

那么2dArray 数组有两层从左到右是“数组的指针”“数组”

delete[]时候,销毁的是2dArray最左侧的数组,也就是存放指针的数组。这会是什么效果呢?删除了数组的指针以后,我们就找不到那50个包含数据的数组了,他就永远永远永永远远留在那了,会造成内存泄露等等问题。

#include<iostream>

int main()
{
    //int* Array = new int[50];
    int** 2dArray = new int*[50];
    for(int i=0;i<50;i++)
        2dArray[i] = new int[50];

    2dArray[0][0] = 0;
    2dArray[0][1] = 1;
    2dArray[0][2] = 5;
    2dArray[0][3] = 8;

    for(int i=0;i<50;i++)
        delete[] 2dArray[i];

    delete[] 2dArray ;
    std::cin.get();
}

先循环对2dArray[i]删除50个带数据的数组,然后再删除2dArray这个装载了50个指针的数组。

标签:int,29,C++,50,2dArray,数组,多维,new,指针
From: https://blog.csdn.net/weixin_64418869/article/details/140747049

相关文章

  • C++自学笔记30(类型双关)
    上栗子#include<iostream>intmian(){inta=50;doublever=a;std::cout<<ver<<std::endl;std::cin.get();}a是一个占据4字节的数据,将a复制给ver并转换为double8个字节。这其中就是隐式的类型转换。第一个是int类型的50,第二个是类型转换后的......
  • 【C++】实验五
    题目:1、五角数被定义为n(3n-1)/2,n=1,2,……,以此类推。因此最初的几个五角数为1,5,12,22,……,请使用下面的函数头编写函数,返回五角数:intgetPentagonaNumber(intn)编写程序,使用这个程序展示前20个五角数,每行打印5个。思路:首先需要编写一个返回五角数的函数,输出20个数需要在主函数......
  • C++中 cin、cin.get()、cin.getline()、getline() 的区别
    cin我们先介绍c++中最常用的输入流对象cin我们常用 cin>>num 来从缓冲区中读取数据到 num 中,num 的变量类型可以是多种类型,最常用的有 int、string、char、double、float等等voidcin_test(){std::cout<<"-----------cintest---------"<<std::endl;st......
  • 【C++软件调试技术】使用 Windbg 分析软件异常时的诸多细节与技巧总结
    目录1、dump文件1.1、dump文件的生成方式1.2、dump文件的大小2、pdb符号文件2.1、pdb文件的路径设置2.2、pdb文件的时间戳与名称问题2.3、如何确定要找哪些pdb文件?3、使用Windbg静态分析dump文件以及动态调试程序的一般步骤4、确定发生异常或崩溃的业务模块,到业务模块......
  • [0298]基于JAVA的保健按摩智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的保健按摩智慧管理系统的设计与实现指导老师(一)选题的背景和意义在当前社会环境下,随着人们对健康日益增长的需求以及生活节奏的加快,保健按摩行业呈现出蓬勃发展的态势。然而,传统的保健按摩企业......
  • [0297]基于JAVA的保健品进销存智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的保健品进销存智慧管理系统的设计与实现指导老师(一)选题的背景和意义【开题报告背景】在当今社会,随着国民健康意识的提升和生活质量追求的增长,保健品市场呈现出持续繁荣的发展态势。然而,伴随着......
  • 【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解
    前言:在前面,我们已经学习了很多存储机构,包括线性存储、树性存储等,并学习了多种拓展结构,效率也越来越高,但是是否有一种存储结构可以在大部分问题中都一次找到目标值呢?哈希可能能实现目录一、哈希的概念二、哈希冲突三、哈希冲突解决3.1开放寻址法节点结构插入操作查......
  • Codeforces Round 962 (Div. 3) A - D详细题解(思路加代码Python,C++(垃圾灰名小白想
             吐槽一下,这次比赛不知道怎么的,可能是div3参加的人比较多吗,代码题解上去后全是inqueue,比赛的过程中我还看了提交的,80多页几千个提交全是inqueue,我的代码等了**半个多小时才运行,然后发现timelimit真的有点搞心态,思路在下一题我还要反过来去优化上一题,不过......
  • Visual Studio C++ 安装以及使用教程
    官网下载网址https://visualstudio.microsoft.com/zh-hans/VisualStudio:面向软件开发人员和Teams的IDE和代码编辑器(microsoft.com)下载好后双击运行跳出该界面,等待加载结束在组件选择界面,只需要选择这一项,勾选好后点击安装即可下载完后,点击图标打开C++点击创......
  • 【免费领源码】Java/Mysql数据库+SSM校园兼职网站 25557,计算机毕业设计项目推荐上万套
    摘 要当今人类社会已经进入信息全球化和全球信息化、网络化的高速发展阶段。丰富的网络信息已经成为人们工作、生活、学习中不可缺少的一部分。人们正在逐步适应和习惯于网上贸易、网上购物、网上支付、网上服务和网上娱乐等活动,人类的许多社会活动正在向网络化发展。兼职......