C++动态创建二维数组的困惑

Vivid_Song 2016-11-05 05:13:27
我知道动态创建二维数组的方法是:

double**augmentedMatrix = new double*[sizeOfArray];//在堆中申请一个二维指针用于存放方阵系数
for (int rows = 0; rows < sizeOfArray; rows++)
{
augmentedMatrix[rows] = new double[sizeOfArray];
}

但我不明白为什么下面的方法不行:
int(*p)[x]=new int [x][x];



各位大神请赐教,先谢谢了
...全文
156 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fefe82 2016-11-06
  • 打赏
  • 举报
回复
int(*p)[3]=new int [x][3]; 严格的讲,C++ 没有二维数组,只有数组的数组。 可以 new 一个数组的数组,但是内部的数组类型必须是完整的,而数组的长度是数组类型的一部分。内部数组的长度如果是确定的,就可以。如果两位都是动态的,那是不行的。
HymanLiuTS 2016-11-06
  • 打赏
  • 举报
回复
很简单,语法问题,你动态创建一个数组,new arr[3]实际上是调用了new[]关键字,因为没有new[][]这个关键字,所以new[3][3]语法错误,编译器不认识。
ri_aje 2016-11-06
  • 打赏
  • 举报
回复
要没什么特殊需求,直接 vector<vector> 就行了。或者 vector<int>然后加载二维的逻辑视图。这年头 c++ 程序里应该很少见 new/delete 才对。
勤奋的小游侠 2016-11-06
  • 打赏
  • 举报
回复
	int const x = 10;
	int(*p)[x] = new int[x][x]; //可以通过,并没有什么问题,问题出在const上面,如果数组长度是不确定的,编译器也无法知道二维的长度,数组的数组就无法确定应该位移多长去访问。所以如果需要在运行时才确定数组长度,需要new二次。

	int  y = 10;
	int(*p)[y] = new int[y][y];//无法通过
paschen 版主 2016-11-05
  • 打赏
  • 举报
回复
因为标准就没有 new[][] 的语法 C/C++动态申请的二维数组无非是一维数组的一维数组
jiqiang01234 2016-11-05
  • 打赏
  • 举报
回复
没这种语法。 c/c++是平展的内存布局,二维数组在内存中的布局和一维的是一样的。可以new一个二维数组大小的一维数组,然后强制转化为二维数组的指针。

64,654

社区成员

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

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