二维数组

两个维度的长度需要通过其他计算分别获得,分别为rnum,cnum。那么floatdarray[rnum][cnum];会报错“不允许使用不完整的类型”。float*dar... 两个维度的长度需要通过其他计算分别获得,分别为rnum,cnum。
那么float darray[rnum][cnum];会报错“不允许使用不完整的类型”。
float *darray=new float[rnum][cnum];也会报错“表达式必须含有常量值”。
问题:这类声明,使用指针该如何申明和赋值,不使用指针又该怎么做,谢谢有大神能够指导。
即问题:c语言中,二维数组(其长度需要另外计算获得,不是已知的常量)该如何正确的定义?
展开
 我来答
百度网友8ce788f
2016-12-29 · TA获得超过687个赞
知道小有建树答主
回答量:850
采纳率:80%
帮助的人:209万
展开全部
2个解决办法。
方法1(二维数组其实也是一维数组): 把二维数组按照一维分配内存,把其下标 换成1维下边进行运算。

举个栗子:
a[5][5] ;
可以直接分配一个 a[5 * 5] 的内存;这样就可以 用new了吧 ;计算时,比如要对a[2][3]进行赋值 可以直接取 一维 a[2 * 5 + 3] 这个下标;5为宽度。 公式:纬度下标×宽度+长度下标。

方法2(没有方法1用着方便):使用动态二维数组。
栗子:该怎么解释呢。。。。直接看代码吧。。。
int** a;
int x = 5,y = 10;
a = new int*[x]; //就是一个指针数组。
for(int i= 0;i < x;++i)
a[i] = new int[y];//让a数组的每一个元素成为一个数组首地址.
需要注意的是,使用后,记得手动释放内存。
植物延时爱力汣
2016-12-29 · TA获得超过162个赞
知道小有建树答主
回答量:246
采纳率:33%
帮助的人:50.3万
展开全部
首先要明确几点:
1、二维数组可按行分段赋值,也可按行连续赋值。{{1,2},{0}}是按行分段赋值,{1,2,3,4,5,6}是按行连续赋值。

2、可以只对部分元素赋初值,对于int型数组,未赋初值的元素自动取0值。

3、如对全部元素赋初值,则第一维的长度可以不给出。

A,B,D选项符合以上条件,唯有C选项,是按行分段赋值,给出了3行数据(最外层大括号内有3组分段的大括号),而定义的第一维长度是2,所以是不正确的。
追问
非常感谢您的回答,但是您的回答并没有让感觉问题得到了解决
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式