二维数组
两个维度的长度需要通过其他计算分别获得,分别为rnum,cnum。那么floatdarray[rnum][cnum];会报错“不允许使用不完整的类型”。float*dar...
两个维度的长度需要通过其他计算分别获得,分别为rnum,cnum。
那么float darray[rnum][cnum];会报错“不允许使用不完整的类型”。
float *darray=new float[rnum][cnum];也会报错“表达式必须含有常量值”。
问题:这类声明,使用指针该如何申明和赋值,不使用指针又该怎么做,谢谢有大神能够指导。
即问题:c语言中,二维数组(其长度需要另外计算获得,不是已知的常量)该如何正确的定义? 展开
那么float darray[rnum][cnum];会报错“不允许使用不完整的类型”。
float *darray=new float[rnum][cnum];也会报错“表达式必须含有常量值”。
问题:这类声明,使用指针该如何申明和赋值,不使用指针又该怎么做,谢谢有大神能够指导。
即问题:c语言中,二维数组(其长度需要另外计算获得,不是已知的常量)该如何正确的定义? 展开
2个回答
展开全部
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数组的每一个元素成为一个数组首地址.
需要注意的是,使用后,记得手动释放内存。
方法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数组的每一个元素成为一个数组首地址.
需要注意的是,使用后,记得手动释放内存。
展开全部
首先要明确几点:
1、二维数组可按行分段赋值,也可按行连续赋值。{{1,2},{0}}是按行分段赋值,{1,2,3,4,5,6}是按行连续赋值。
2、可以只对部分元素赋初值,对于int型数组,未赋初值的元素自动取0值。
3、如对全部元素赋初值,则第一维的长度可以不给出。
A,B,D选项符合以上条件,唯有C选项,是按行分段赋值,给出了3行数据(最外层大括号内有3组分段的大括号),而定义的第一维长度是2,所以是不正确的。
1、二维数组可按行分段赋值,也可按行连续赋值。{{1,2},{0}}是按行分段赋值,{1,2,3,4,5,6}是按行连续赋值。
2、可以只对部分元素赋初值,对于int型数组,未赋初值的元素自动取0值。
3、如对全部元素赋初值,则第一维的长度可以不给出。
A,B,D选项符合以上条件,唯有C选项,是按行分段赋值,给出了3行数据(最外层大括号内有3组分段的大括号),而定义的第一维长度是2,所以是不正确的。
追问
非常感谢您的回答,但是您的回答并没有让感觉问题得到了解决
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询