社区
C语言
帖子详情
如何建立一个动态二维数组? 用NEW
banksqian
2002-08-27 10:18:35
建一维数组我会.
int n;
cin >> n;
int *p = new int[n];
如何建一个二维的? P[M][N]?
谢谢
...全文
347
14
打赏
收藏
如何建立一个动态二维数组? 用NEW
建一维数组我会. int n; cin >> n; int *p = new int[n]; 如何建一个二维的? P[M][N]? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
geeksky
2002-08-30
打赏
举报
回复
数组名可以当作指针用,但指针应该是不能当作数组名用吧
我是菜鸟,说错了不要骂
===================================================================
落花有意随流水,流水无心恋落花
===================================================================
evilsong
2002-08-30
打赏
举报
回复
请看我昨天的贴子:"一个多维数组类",很详细的
ylbug
2002-08-30
打赏
举报
回复
这就不是我最先所说的只有最左边那一维的大小是可变的吗?!
stidio_zhougang
2002-08-29
打赏
举报
回复
今天我又搞出了一种办法:
int (*p)[4]=new int[3][4];
简单吧,我验证了,绝对符合数组要求,并且不多申请空间!
哈哈,So Easy!
banksqian
2002-08-28
打赏
举报
回复
谢谢大家.
radioheads 第一行应为 int **x = new int *[n];
第三行应为 int *y = new int[m]; // row 和 column 不同
两位的答案都对,意思一样的,都通过验算,谢谢......
ylbug
2002-08-28
打赏
举报
回复
这不失为一个办法,损失一点效率而与,如果追求效率的话,还是用一维数组代替吧!
ml_jack
2002-08-28
打赏
举报
回复
地址不连续没问题, 使用时是透明的,
每一行用一个new
最好用类封装起来,再从在一下运算符,就更好用了
ylbug
2002-08-28
打赏
举报
回复
一句话:必须分配连续的地址空间,才能用二位数租的引用方式,老猫的那种方式是不对的,能通过演算可能因为每次分配的空间比较小,地址恰好连续。你可以在VC环境下编译你的代码,运行的时候很可能出现异常:Access Vilation
stidio_zhougang
2002-08-28
打赏
举报
回复
如果认为这是对的,我想首先你应该先仔细理解一下二维数组的概念,更确切的说应该是理解一下二维数组空间存储的概念:二位数组要求数组名指向一片连续的内存(借用ylbug(臭虫)兄的一句话)
请看这个程序:
#include <iostream>
using namespace std;
int main()
{
int i;
int **p=new int*[3];
for(i=0;i<3;i++)
p[i]=new int[4];
for(i=0;i<3;i++)
cout<<p[i]<<'\t';
}
按照上面的理论可以知道由于每个int占用4个字节(32位机),则
假如p[0]=0x00341F18,则p[1]=0x00341F28 ,p[3]=0x00341F38
但是实际上为:00341F18 00341F30 00341F48
于是这不是标准二维数组所能满足的:
如果要实现可以采用这种方式:
#include <iostream>
using namespace std;
int main()
{
int i;
int *iForAll=new int[3*4]
int **p=new int*[3];
for(i=0;i<3;i++)
p[i]=new(iForAll+i*4) int[4];
//如果这句不能理解这样用也可以:p[i]=iForAll+i*4
for(i=0;i<3;i++)
cout<<p[i]<<'\t';
}
现在运行试试,看看是不是已经标准了?:)
forrest2001
2002-08-27
打赏
举报
回复
老猫没错
实践通过 有什么问题??
radioheads
2002-08-27
打赏
举报
回复
int **x = new *int[n];
for(int ix = 0; ix < n; ix++)
{
int *y = new int[n];
x[ix] = y;
}
对吗?
ylbug
2002-08-27
打赏
举报
回复
你得到p不是指向连续的m*n*sizeof(int)空间,但是二位数组要求数组名指向一片连续的内存,这样才能使用p[i][j]这种运算,因为p[i][j]相当于*(p+i*n+j)
ylbug
2002-08-27
打赏
举报
回复
好象这样不行把
blh
2002-08-27
打赏
举报
回复
例子:
#include <stdio.h>
// M: 5, N 6
int **p;
int main()
{
int i, j;
p = new int *[5];
for (i = 0; i < 5; i ++)
{
p[i] = new int[6];
for (j = 0; j < 6; j++)
p[i][j] = j;
}
for (i = 0; i < 5; i++)
{
for (j = 0; j < 6; j++)
printf("%4d", p[i][j]);
printf("\n");
}
return 0;
}
动态
创建
二维数组
的两种方法
其实
二维数组
也可以说是
一个
一维数组,只是这个一维数组比较特别,它的每
一个
元素都是
一个
一维数组。虽然
二维数组
在底层是按照一维数组的存储方式来存储的,即存完第一行,紧跟着存第二行,后边依次存储剩下的行。...
14.
二维数组
:什么是
二维数组
???
二维数组
可以认为是特殊的一维数组,一维数组中的每个元素又是
一个
一维数组 分类: 规则的
二维数组
不规则的
二维数组
2. 什么是规则的
二维数组
? 数组形状是规则的 package season7; public class TestGuiZeArray2 ...
C++
动态
申请
二维数组
与
二维数组
传参
但是如何
动态
分配
一个
二维数组
呢?像这样: int **pa =
new
int[3][3] ?测试一次 => 显然这种分配方式是不正确的: 在尝试新的方法之前,我们需要首先了解
二维数组
在内存中的存储结构: ...
C++
建立
动态
二维数组
C++
建立
动态
二维数组
主要有两种方法: 1.使用数组指针,分配
一个
指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配
一个
数组 int **b=
new
int*[row]; //分配
一个
指针数组,将其首地址保存在b中
C++ 如何定义
动态
二维数组
?
今天遇到了
一个
简单的问题,怎么
建立
动态
的
二维数组
,如何函数传递
二维数组
; 需要先申请
一个
M个元素的一维指针空间,然后对每个一维指针上,申请N个元素的对象空间。这样就可以申请
一个
M行N列的
二维数组
空间了。以...
C语言
70,037
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章