社区
C语言
帖子详情
如何建立一个动态二维数组? 用NEW
banksqian
2002-08-27 10:18:35
建一维数组我会.
int n;
cin >> n;
int *p = new int[n];
如何建一个二维的? P[M][N]?
谢谢
...全文
317
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++编程NOIP/CSP竞赛通关语法-二维
数组
1、本课程为零基础C++语法专题课,是青少儿参加信息学奥赛NOIP/CSP需要学习的语法专题课; 2、本课程每节课均配有练习题以及真题,以锻炼孩子的解题能力;... 6、本课程介绍的是二维
数组
。也是历来竞赛重要考点。
动态
创建二维
数组
的两种方法
首先来讲解一下什么是二维
数组
。其实二维
数组
也可以说是一个一维
数组
,只是这个一维
数组
比较特别,它的每一个元素都是一个一维
数组
。虽然二维
数组
在底层是按照一维
数组
的存储方式来存储的,即存完第一行,紧跟着存第二行,后边依次存储剩下的行。但是我们习惯上把它看做矩阵,一般也选择让他以矩阵的方式呈现在我们眼前,所以二维
数组
也称为矩阵。 方法1 既然二维
数组
也可以称为矩阵,那么我们就可以给二维
数组
的每一行...
14.二维
数组
:什么是二维
数组
???
跟汤老师学Java笔记:二维
数组
完成:第一遍 1.、什么是二维
数组
? 二维
数组
可以认为是特殊的一维
数组
,一维
数组
中的每个元素又是一个一维
数组
分类: 规则的二维
数组
不规则的二维
数组
2. 什么是规则的二维
数组
?
数组
形状是规则的 package season7; public class TestGuiZeArray2 { public static void main(String[] args) { // 规则的二维
数组
// 定义二维
数组
int[][] nums; Str
C++
动态
申请二维
数组
与二维
数组
传参
在C++中我们知道: int *ptr =
new
int; 这样可以
动态
分配一个int型指针 int *ptr =
new
int[3]; 这样可以
动态
分配一个一维
数组
但是如何
动态
分配一个二维
数组
呢?像这样: int **pa =
new
int[3][3] ?测试一次 => 显然这种分配方式是不正确的: 在尝试新的方法之前,我们需要首先了解二维
数组
在内存中的存储结构: ...
C++
建立
动态
二维
数组
C++
建立
动态
二维
数组
主要有两种方法: 1.使用
数组
指针,分配一个指针
数组
,将其首地址保存在b中,然后再为指针
数组
的每个元素分配一个
数组
int **b=
new
int*[row]; //分配一个指针
数组
,将其首地址保存在b中
C语言
69,382
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章