社区
C语言
帖子详情
如何建立一个动态二维数组? 用NEW
banksqian
2002-08-27 10:18:35
建一维数组我会.
int n;
cin >> n;
int *p = new int[n];
如何建一个二维的? P[M][N]?
谢谢
...全文
363
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;
}
c++
二维数组
的
动态
建立
_
new
函数
(17条消息) C++用
new
创建
二维数组
的方法_南加无雨-CSDN博客_c++
new
二维数组
这位博主的blog前两种方法,均使
二维数组
的某一维为常量 如果需要二维均为变量,
动态
规划,这位博主借助了vector容器 新的改进: 不需要使用vector容器,正常声明 //创建二维指针,并为'行'申请a个(储存int*类型变量的)
动态
内存空间 int** num =
new
int* [a]; for (int i = 0; i < a; i++) { //完善'行'
C++中使用
new
动态
声明
二维数组
的方式
C++中
动态
二维数组
的声明方式 在C/C++中定义
动态
数组时我们都很熟悉使用的是
new
关键字,基本语法如下: typeName *arrayName =
new
typeName[arraySize]; 比如若想通过输入的 n 来创建
一个
数组大小为 n 的 int 型数组时,可以这样写: cin >> n; int *a =
new
int[n]; 通过上面这个语句我们在内存地址中分配了一片 int[n] 大小的内存空间,并将其首地址赋值给了 a ,在这里 a 是 int* 类型的指针变
C++
建立
动态
二维数组
C++
建立
动态
二维数组
主要有两种方法: 1.使用数组指针,分配
一个
指针数组,将其首地址保存在b中,然后再为指针数组的每个元素分配
一个
数组 int **b=
new
int*[row]; //分配
一个
指针数组,将其首地址保存在b中
new
一个
指针数组、以及创建
动态
二维数组
原文:https://blog.csdn.net/wangshubo1989/article/details/50062257 实际工作中,有
一个
类A,现在需要使用多个A对象的指针,这是时候,首先想到的就是指针数组。 ———————————————————————————————————————————— 指针数组与数组指针 首先,指针数组和数组指针有何区别是老生常谈的东西: 看中文不方便,看看英...
创建
动态
二维数组
http://blog.csdn.net/longshengguoji/article/details/11131365 int _tmain(int argc, _TCHAR* argv[]) { int row,column; cin>>row>>column; //方法一 //申请空间 int ** a =
new
int *[row];//分配
一个
指针数组,将其首地址保存在b
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章