在c++中,有的时候会遇到变长的数组(不管是一维的还是二维的),这个时候就需要用到动态数组了,并且要用new和delete两个操作符,这俩操作符一般成对使用。

先说一维的动态数组吧,直接上代码

 #include<iostream>
using namespace std;
int main()
{
int n; //输入数组长度
cin>>n;
int *p; //声明一个指针
p=new int[n]; /*创建了一个长度为n的动态数组,并且返回这个数组的首地址给p,p就指向了这个动态数组,可以通过指针p
来操作数组,因为创建的动态数组并没有名字,只返回了首地址给p,所以可以把p看作是这个动态数组的名字 */
for(int i=;i<n;i++)
cin>>p[i];
for(int i=;i<n;i++)
cout<<p[i]<<" ";
delete []p; //释放这个一维的动态数组,而不是释放指针p。用完以后要记得释放掉
cout<<p; //输出指针p的地址
return ;
}

用完了以后,在14行释放掉了这个动态数组,而不是释放的指针p(以便接下来还能使用),接着又输出了指针p的地址。如果你释放掉了指针p,delete p; 那么接下来就

不能再使用用指针p了,因为p所占的内存空间已经释放了,再用的话就会出错。比如在第14行后加上 delete p;然后再执行下一条语句 cout<<p; 来输出p的地址就会报错

报错如下:

说了这么多有点跑题了,只是想说明一下不要释放错。

再说一下二维的动态数组,上代码

#include<iostream>
using namespace std;
int main()
{
int m,n; //输入数组大小
int *column;
int **p; //声明一个二级指针
cin>>m;
column=new int[m]; //column用来记录每行元素的个数,因为每行元素的个数可能不同,如果都相同的话就不需要了
p=new int*[m]; //创建了一个有m行的的二维动态数组;可以看成数组p[m]中每个元素都是指针,用来指向一个数组
for(int i=;i<m;i++)
{
cin>>n;
column[i]=n;
p[i]=new int[n]; //确定每行元素的个数,p[i](一级指针)为每行元素的首地址 }
for(int i=;i<m;i++) //输入每行元素的值
{
for(int j=;j<column[i];j++)
cin>>p[i][j];
}
cout<<"---------输出每行元素-----------\n";
for(int i=;i<m;i++) //输出每行元素
{
for(int j=;j<column[i];j++)
cout<<p[i][j]<<" ";
cout<<endl;
} for(int i=;i<m;i++) //用完释放掉每行(释放二级指针)
delete []p[i];
delete []p; //释放掉每行后,再释放这个二维数组(释放一级指针)
cout<<"指针p的地址:"<<p; //输出指针p的地址
return ;
}

注释我写的比较详细,运行结果如下图

可以看到每行的长度都可以不同,这个就根据个人需要了。

c++动态数组的使用的更多相关文章

  1. 常用数据结构-线性表及Java 动态数组 深究

    [Java心得总结六]Java容器中——Collection在前面自己总结的一篇博文中对Collection的框架结构做了整理,这里深究一下Java中list的实现方式 1.动态数组 In compu ...

  2. C语言 · 动态数组的使用

    从键盘读入n个整数,使用动态数组存储所读入的整数,并计算它们的和与平均值分别输出.要求尽可能使用函数实现程序代码.平均值为小数的只保留其整数部分. 样例输入: 5 3 4 0 0 2样例输出:9 1样 ...

  3. C++中关于[]静态数组和new分配的动态数组的区别分析

    这篇文章主要介绍了C++中关于[]静态数组和new分配的动态数组的区别分析,很重要的概念,需要的朋友可以参考下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加 ...

  4. C++之动态数组

    C99支持一种名为变长数组的结构来方便程序员.C++也提供了一种长度可在程序运行时确定的数组类型:动态数组.声明格式为:(声明 int 类型的数组) ; //此处可修改 ArraySize 的值 in ...

  5. VB默认属性、动态数组、Range对象的默认属性的一点不成熟的想法

    1.默认属性 VB6.0有默认属性的特性.当没有给对象指定具体的属性时,"默认属性"是VB6.0将使用的属性.在某些情形下,省略常用属性名,使代码更为精简. 因为CommandBu ...

  6. C#有关数组内存的释放及动态数组问题

    一.数组内存释放问题 数组内存的释放可以按照如下语句实现: string [] aa=new string[2]; aa[0]="A"; aa[1]="B"; ...

  7. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  8. C++ 动态数组实例

    一维动态数组的实例: #include <iostream> using namespace std; int main() { int *arr; int n; cout<< ...

  9. C++动态数组

    一: 一维数组初始化 标准方式1:int value[100]; //value[i]的值不定,因为没有初始化:标准方式2:int value[100] = {1,2,3}; //value[0],v ...

  10. ALLOCATE语句分配FORTRAN动态数组方法(转自http://blog.csdn.net/zhuxianjianqi/article/details/8067174)

    数组的动态分配 a)    可分配数组 数组可以是静态的也可以是动态的.如果数组是静态的,则在编译时就被分配了固定的储存空间,并且直到程序退出时才被释放.程序运行时静态数组的大小不能改变.静态数组的缺 ...

随机推荐

  1. 大流量大负载的Kafka集群优化实战

    前言背景 算法优化改版有大需求要上线,在线特征dump数据逐步放量,最终达到现有Kafka集群5倍的流量,预计峰值达到万兆网卡80%左右(集群有几十个节点,网卡峰值流出流量800MB左右/sec.写入 ...

  2. MYSQL-----------实验一 MySQL的安装与命令初步

    (1)启动MySQL,并打开任务管理器查看服务进程是否已经启动.   (2) 进入Windows命令行,使用命令登录MySQL服务器.   (3) 使用show命令查看当前系统的字符集,并修改其中的两 ...

  3. vulnhub~incllusiveness

    这个机子相对简单一点,但是也是从中发现了自己不少问题 技能一:  nmap 扫描发现了21,22 ,80三个端口,并且ftp服务允许匿名登录,在pub目录下面有writeable权限,这就好办了.我以 ...

  4. 前端面试题解密:经典算法之冒泡算法(ES6版)及优化

    前言 随着前端的飞速发展,前端业务开发给前端工程师提出了更高的要求,因而算法题也越来越高频次的出现在前端面试中.有很多的小伙伴找胡哥苦诉,在前端实际开发中(除了涉及游戏开发方面),算法使用有很多吗?大 ...

  5. Mysql数据库下载以及安装(至安装成功cmd可访问)

    主要整理了一下Mysql安装的过程 安装的具体步骤见: https://blog.csdn.net/weixin_43465312/article/details/89897580?ops_reque ...

  6. 谁给你说的 Ubuntu 不可以输入中文

    文章更新于:2020-04-04 按照惯例,需要的文件附上链接放在文首 文件名:sogoupinyin_2.3.1.0112_amd64.deb 文件大小:25.5 MB 下载链接:https://w ...

  7. flask from_object和from_pyfile的区别

    flask  from_object和from_pyfile的区别 from_object接受的是一个模块对象,需求导入 from_pyfile接受的是一个文件名的字符串,文件可以不是py文件也可以是 ...

  8. Springboot2(二)通过微信熟悉熟悉Spring-boot yml配置文件

    前言:Spring-boot的yml配置文件,这里就不在借助人.狗介绍了,试试套下微信! 创建yml文件 值得注意的是下图中有三种命名方法,前两种是对的,且第二种必须是横线而不是下划线! yml文件的 ...

  9. jvm入门及理解(一)——简介与体系架构

    最近,在学习java虚拟机的内容中,在此总结和记录下学到的. 一.JVM在计算机中的位置 在我们初学java时,便知道java源文件文件会先通过Java编译器编译成字节码文件,这个过程是java编译过 ...

  10. 20 java 基础回顾--中阶引入

    一.数据类型 基本数据类型(共:四类八种) 整数 byte short int long 浮点 float double 字符 char 布尔 boolean 引用数据类型(new的数据) Stude ...