C++中如何定义动态数组
首先:为什么需要动态定义数组呢?
这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先知道的,必须在程序运行时动态的给出
但是问题是,c++要求定义数组时,必须明确给定数组的大小,要不然编译通不过
如: int Array[5];正确
int i=5;
int Array[i]; 错误 因为在编译阶段,编译器并不知道 i 的值是多少
那么,我们该如何解决定义长度未知的数组呢?
答案是:new 动态定义数组
因为new 就是用来动态开辟空间的,所以当然可以用来开辟一个数组空间
这样,下面的语句:
int size=50;
int *p=new int[size]; 是正确的
但是二维动态数组能不能也这样定义呢
int size=50,Column=50;
int (*p)[Column]=new int [size][Column]
这样的语句,编译器通不过,为什么呢?
首先 new int[size][Column] 就是动态生成时确定的,所以它没有错
那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。 而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。
改成这样:
int size=50
int (*p)[50]=new int [size][50]
便正确了。
由此可见,这种动态分配数组,仅对一维数组空间是真正动态分配的。
但是如何真正的动态分配二维数组呢,即如果Column 也不能预先知道的话,该如何处理呢?
上面的动态分配已经不能满足我们的要求,因为上面动态分配只对一维数组是真正动态的,对二维数组的话,必须编译之前预先知道二维数组每一列的长度,而这个长度在很多情况下是不能预先知道的,所以我们得结合其他方法来解决这个问题。
既然一维是真正的动态分配的话,那我们利用这一特性定义一个指针数组。
int **p= new int*[size];//定义指针数组
int *p[5];// 假若知道二维数组的行数为5
然后对指针数组中的每一个指针分配一个一维数组空间,这样便动态定义了二维数组
事实上,我认为指针数组的主要用途,就在于动态定义多维数组
for(int i=0;i<size;i++)
{
p[i]=new int[Column];
}
运行完毕后,一个二维数组便被动态的成功建立
-----------------------------------
例子:
size =6;
column =5
int **p=new int*[size];
for(int i=0;i<size;i++)
{
p[i]=new int[Column];
}
所生成的动态数组如下图所示:
最后 ,因为调用了new, 千万千万别忘记在用完之后,将其所占资源 delete 掉
下面是delete方法:
for(int i=0;i<size;i++)
{
delete [] p[i]; // 要在指针前加[] , 否则的话 只释放p[i]所指的第一个单元所占的空间
}
delete [] p; //最后不要忘掉 释放掉开辟的指针数组 :》
假设是char型
char*p,*q;; ](char*)realloc(q,20);//A行,通过realloc扩大p的空间,并把新的地址赋值给p。 |
|
int number , *p;
cin>>number; int *p = new int[number]; ....... delete []p; //最后要delete掉new出来的数组 |
C++中如何定义动态数组相关推荐
- python去除数组缺失值_动态数组的应用,VBA中如何利用动态数组去除重复值的第二讲...
大家好,我们今日继续讲解VBA代码解决方案的第62讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法第二部分.在上一讲中,我们讲了知识点的利用,其一是Filter函数,其二是ReDi ...
- c++删除数组中重复元素_在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法...
大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法.如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法 ...
- Java中如何定义一个数组呢?
转自: Java中如何定义一个数组呢? 数组(Array)是有序的元素序列.若将有限个类型相同的变量的集合命名,那么这个名称为数组名.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标 ...
- java中的arrayList(动态数组)与静态数组
首先,有时用数组时,常把静态数组和动态相混淆,今天来区分一下: 先写一下java中静态数组, 一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元 ...
- C语言中malloc函数及free函数用法(定义动态数组及释放)
一.关于静态数组.动态数组 二.malloc()和free()的基本概念以及基本用法 1.函数定义 2.函数用法 3.关于函数使用注意事项 三.malloc()函数分配内存空间的由来 四.malloc ...
- C++中如何定义某个数组的引用?
我要定义一个函数,以某个数组为参数.函数中要计算这个数组的长度. 如果是在外面,可以直接用诸如sizeof a/sizeof a[0]这样的方法得到,但是我把a作为参数传到函数中后,这个形参就是指针类 ...
- java中如何定义一个数组
数组的定义方法 //定义一个空数组, int[] a=null; int[] a={}; int[] a=new int[0]; 注意:空数组没有空间,不能赋值!只能把另一个数组的地址给他,这里指的是 ...
- python中如何定义一个数组_Python数组定义方法
本文实例讲述了Python数组定义方法.分享给大家供大家参考,具体如下: Python中没有数组的数据结构,但列表很像数组,如: a=[0,1,2] 这时:a[0]=0, a[1]=1, a[[2]= ...
- python声明数组_在Python中如何声明动态数组
I want to declare an Array and all items present in the ListBox Should Be deleted irrespective of th ...
最新文章
- 自然语言处理 的 一些环境和包
- spring boot一:入门
- hadoop学习;datajoin;chain签名;combine()
- 张亚勤:从信息化生存到互联网化生存 百度重构互联网安全防护体系
- hadoop 伪分布模式
- 字符串的转换相关方法
- matlab中关于@的作用(函数表达式句柄)
- 变量命名 – 匈利亚命名法则 - C语言零基础入门教程
- mug网络用语_各种游戏术语
- 如何在Mac上轻松使用SVN
- 手心输入法导致 Navicat for MySQL闪退的解决办法
- 利用python爬取租房信息网_python实战计划:爬取租房信息
- windows系统镜像修复计算机,Win7操作系统下系统还原和映像修复方法
- TI-C6657开发板烧录步骤
- Jetty插件运行报500错误
- uniapp picker选择器注意点
- Java流程控制方法
- 【转载】Android功耗改进
- EXCEL公式-文本型数据转换为数值型数据
- 软考程序员有必要考吗?
热门文章
- webpack 合并压缩_webpack的运用
- mysql 开启innodb win版本_MySQL安装与启动——Windows系统下
- ogg批量配置_Macos上一款批量文件重命名工具A Better Finder Rename 11
- python自动获取号码归属地_Nemo_Python:批量获取并保存手机号的归属地和运营商_Nemo社区_LinkNemo_关于分享和探索的好地方...
- 不同编程语言能耗不同?看这27种语言对比!
- 电机驱动TB6612FNG全网断货,可替代方案来了,文末送模块!
- 列表_月隐学python第6课
- 信号的时频分析MATLAB,[转载]时频特性分析(Matlab)
- julia const报错_我爱Julia之入门-004
- iris数据_Kaggle 数据可视化课程5