有关动态创建释放二维数组,以及指向数组的指针问题集合
来源:互联网 发布:手机建模软件中文 编辑:程序博客网 时间:2024/06/05 17:32
转载地址:http://blog.sina.com.cn/s/blog_6a0cb8bc0100u49x.html
今天写程序,因为涉及到二维数组的动态创建及释放问题,浏览了相关的文章才发现我的思路有些错误; 例如: int** b; int a[2][3]; b=a;//这句会报错,cannot convert "int[2][3]" into "int**"
例如: int (*b)[3]; //注意一定要让b指向一个含有三个指定类型元素的数组 int a[2][3]; b=a; //这样就ok了 例如: int a=2,b=3; new int[a][b]; //不像一维动态数组,这样声明的二维数组会报错 例如: int (*b)[3]=new int[2][3];
例如: int a=2,b=3; int** c=new int*[a]; for(int i=0;i<a;i++) c[i]=new int[b]; //这样就ok
int a=2,b=3,d=4; int** c=new int*[a]; c[0]=new int[b]; //第一行含有b=3个元素 c[1]=new int[c]; //第二行含有c=4个元素
for(int i=0;i<2;i++) delete[3] b[i]; delete[2] b; b=NULL; //未测试,一会回去测试
for(int i=0;i<;i++) //与创建的顺序完全相反,先释放第二维,再释放第一维 delete[b] c[i]; //释放动态创建的第二维int型数组 delete[a] c; //再释放动态创建的第一维int*型指针数组 c=NULL;
我一直认为二维数组名就是指针的指针:
这说明这两个地址不是同一类地址,即指向int型指针的指针不同于二维int型数组首地址.
1.
一定要使用指向数组的指针才ok
以上这些是关于二维数组地址赋值问题
另外我发现,dev-C++中不能直接动态创建可变动大小的动态二维数组;
而只能静态创建二维数组
PS:这里的b是指向整个三维int型数组的指针,而不是指向首元素的指针,因此他是一个更高维的指针,同二维数组名.可以b[1][1]这样访问数组中的元素,因为这里的b是一个行指针,指向二维数组中的每一行。而b[1],b[2]等是指向二维数组的列指针,也就是相当于降了一维。
2.
因此要动态创建可变动大小的数组必须使用网上提到的另一种方法
这里的以一个new创建的是一个指针数组,这个指针数组中的每一个元素指向int型一维数组的首地址,然后再用第二个new创建多个一维int型数组,并将这些一维int型数组首地址赋值给第一个new创建的指针数组中的每一个元素,这样就完成了一个动态的二维数组的创建。
与标准的矩阵不同的是,这里的二维数组的每一行所包含的元素可以是不同的,即不一定是一个长方形的矩阵 如下:
而且还可以通过c[0][0]来访问二维数组中的[0][0]元素(已测试),这样与平常使用的二维数组习惯统一起来了,看来指针的指针还是和二维数组元素有很大的联系,只不过使用方式上需要注意的。
上面第一种和第二种动态创建二维数组的区别是,通过指向数组的指针来创建的二维数组是一个标准的矩阵,即每一行所包含的元素的个数都是相同的;而通过第二种方法创建的数组的每一行所包含的元素的个数可以不一致,因此不是一个标准的二维矩阵.
以上是动态的创建一个二维数组;下面是相反的过程,利用delete来释放二维数组
1.
对于第一种方法创建的标准矩阵形式的二维数组的释放方法是:
2.
对于第二种方法创建的为标准二维数组的释放方法如下:
分享到X
QQ空间
人人网
天涯
凤凰微博
朋友网
人民微博
豆瓣网
搜狐微博
新华微博
手机
网易微博
开心网
百度空间
QQ好友
更多平台... (132)
bShare
最近喜欢了的博主:
加载中…
- Qing
- 博客
- 转载原文
- 采编
- 长微博
为了您的账号安全,请绑定邮箱
消息
通知
幻灯播放
- 有关动态创建释放二维数组,以及指向数组的指针问题集合
- 有关动态创建释放二维数组,以及指向数组的指针问题集合 .
- 有关动态创建释放二维数组,以及指向数组的指针问题集合
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 二维数组的动态创建和释放
- 指向数组的指针与动态二维数组
- 二维数组 指向二维数组的指针 指针数组 指向二维数组的指针数组
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- 指向二维数组的指针
- C++动态创建二维数组,二维数组指针,以及动态二维数组函数传递
- OpenCV中一个连通域处理函数
- 安卓巴士自测试题——第十三期
- 使用Chrome内置工具进行浏览器伪装
- Android微信实现分享
- 使用SQLQuery 在Hibernate中使用sql语句
- 有关动态创建释放二维数组,以及指向数组的指针问题集合
- 第四部分 个人理财风险防范9.取款也要加小心
- log4net配置文件设置
- hadoop安装以及配置
- C# 获取当前路径方法
- Android -- 网络管理分析
- iOS 5与iOS 6的 low-memory 处理
- 安卓巴士自测试题——第十四期
- Java Socket实战之五 使用加密协议传输对象