可以new一个动态二维数组吗?

zht_304 2010-04-19 03:55:21

#include <iostream>

using namespace std;

int main()
{
int n = 5;
int m = 4;
//int (*p)[n] = new int[m][n];
int (*p2)[n] = (int(*)[n])malloc(m*n*sizeof(int));
cout << p2 << " " << p2+1 << endl;
//delete p;
free(p2);
getchar();
return 0;
}



用new的话应该怎么写?
...全文
182 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
colourtao 2010-04-19
  • 打赏
  • 举报
回复
用循环来new,最后都要看成1唯的
luoye 2010-04-19
  • 打赏
  • 举报
回复

int nRowCount = 10;
int nColumnCount = 10;

int **array = new double*[nRowCount ];

for(int j=0; j<nRowCount ; j++)
array [j]=new double[nColumnCount ];


我用过,所以绝对好使,存取数据时直接用下标就可以: array[i][j].
beyond_sky_007 2010-04-19
  • 打赏
  • 举报
回复

在C++中你只能定义两个一维数组,来当二维数组用,你用NEW创建的数组需要用release释放资源
赵4老师 2010-04-19
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
pengzhixi 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zht_304 的回复:]
对了。 如果加个 const,理论上可以用么?
[/Quote]
可以。
zht_304 2010-04-19
  • 打赏
  • 举报
回复
对了。 如果加个 const,理论上可以用么?
zht_304 2010-04-19
  • 打赏
  • 举报
回复
在vc上试了下。确实是不可以的。

谢谢!不能这样做。 谢谢各位!
zht_304 2010-04-19
  • 打赏
  • 举报
回复
DEV C++. 用的应该是G++ 吧。
白云飘飘飘 2010-04-19
  • 打赏
  • 举报
回复
什么版本的编译器?
zht_304 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lhcwjy 的回复:]
int (*p)[n] = (int(*)[n])(new int[m*n]);n必须是一个常量,也就是列数确定的情况下才能这样用,如:
typedef int ARR[10];
int (*p)[10]=new ARR[m];
[/Quote]

我这边编译通过了。有点纳闷……
白云飘飘飘 2010-04-19
  • 打赏
  • 举报
回复
int (*p)[n] = (int(*)[n])(new int[m*n]);n必须是一个常量,也就是列数确定的情况下才能这样用,如:
typedef int ARR[10];
int (*p)[10]=new ARR[m];
pengzhixi 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zht_304 的回复:]
引用 5 楼 pengzhixi 的回复:
int (*d)[2] = new int[][2];

恩。这个我理解。
先问下 int (*p2)[n] = (int(*)[n])malloc(m*n*sizeof(int)); 这个对不对? 这个p2的类型可以这样定吗?
[/Quote]

没可能的。你n都不确定。不可能这样的。
pengzhixi 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zht_304 的回复:]
引用 5 楼 pengzhixi 的回复:
int (*d)[2] = new int[][2];

恩。这个我理解。
先问下 int (*p2)[n] = (int(*)[n])malloc(m*n*sizeof(int)); 这个对不对? 这个p2的类型可以这样定吗?
[/Quote]

没可能的。你n都不确定。不可能这样的。
zht_304 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lhcwjy 的回复:]
可用一维数组来模拟,象1楼,不过不能使用下标运算符
也可用指针数组,象2楼,
[/Quote]
int (*p)[n] = (int(*)[n])(new int[m*n]);
这样可以不?
zht_304 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pengzhixi 的回复:]
int (*d)[2] = new int[][2];
[/Quote]
恩。这个我理解。
先问下 int (*p2)[n] = (int(*)[n])malloc(m*n*sizeof(int)); 这个对不对? 这个p2的类型可以这样定吗?
白云飘飘飘 2010-04-19
  • 打赏
  • 举报
回复
可用一维数组来模拟,象1楼,不过不能使用下标运算符
也可用指针数组,象2楼,
pengzhixi 2010-04-19
  • 打赏
  • 举报
回复
int (*d)[2] = new int[][2];
_JeffreyWu 2010-04-19
  • 打赏
  • 举报
回复
嗯,楼上那样就行
zht_304 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhanshen2891 的回复:]
new int[m * n];
[/Quote]

确定可以??
cannot convert `int*' to `int (*)[((unsigned int)((int)n))]' in initialization

要不把完整的定义写下。可能我写错了。
Coding4Girls 2010-04-19
  • 打赏
  • 举报
回复
s   =   new   char*[4];   
for (int i = 0; i < 4; ++i)
s[i] = new char[10];

..............

for (int i = 0; i < 4; ++i)
delete[] s[i];
delete[] s;
加载更多回复(1)

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧