在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. POJ2182 Lost Cows 题解

    POJ2182 Lost Cows 题解 描述 有\(N\)(\(2 <= N <= 8,000\))头母牛,每头母牛有自己的独一无二编号(\(1..N\)). 现在\(N\)头母牛站成一 ...

  2. html vue简单

    1.Vue 简单的替换更新 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. Python学习前端之JavaScript

    JavaScript介绍 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客户端执行的语言). Nets ...

  4. 基于Java的数字货币交易系统的架构设计与开发

    前言 无论是股票交易系统,还是数字货币交易系统,都离不开撮合交易引擎,这是交易平台的心脏.同时,一个优秀的架构设计也会让交易平台的运维和持续开发更加容易.本文基于对开源项目的深入研究,总结了数字货币交 ...

  5. vue引入echart Error in mounted hook: "ReferenceError: myChart is not defined" found in

    解决办法: // 实例化echarts对象 var/let myChart = echarts.init(this.$refs.myChart)

  6. Python 1基础语法二(标识符、关键字、变量和字符串)

    一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...

  7. Kubernetes 二进制部署

    目录 1.基础环境 2.部署DNS 3.准备自签证书 4.部署Docker环境 5.私有仓库Harbor部署 6.部署Master节点 6.1.部署Etcd集群 6.2.部署kube-apiserve ...

  8. 邮件退信“Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'”

    标题是一个近期遇到的NDR 对于Exchange运维工作者,NDR通常给了我们较为清晰的排错方向,我们先看一下退信的原因, 我的一台MailBox报错“远程服务器返回‘420 4.2.0’接受延迟,因 ...

  9. OpenWrite 编辑器如何配置七牛云图床

    感谢用户 mutiantong.cn 的创作分享,原文链接:https://www.jianshu.com/p/29f33ca6e491 1. 配置七牛云 1.1 通过七牛云链接购买七牛云对象存储, ...

  10. 内存对齐 align

    /* 地址对齐:指的是存放数据的首地址%N==0,而且整个结构体的大小%M(结构体的有效对齐值)==0 1 数据类型的自身对齐值:char:1 short:2 int,flolat,double:4 ...