c语言不确定长度二维数组申明与初始化

1、这样不会报错 float *dataarray = new float[cnum];(cnum不是常量,而是通过计算获得)
2、但是这样却会报错 float **dataarray = new float[rum][cnum];(其中rnum和cnum可以在此语句前通过其他操作获得)
问题是:2、的功能该怎么正确实现?

那不是rnum和cnum的问题,而是三级指针dataarray的类型与float[rum][cnum]不匹配。二级指针dataarray只与float[rum]的类型匹配,*dataarray才与float[rum][cnum]匹配。追问

非常感谢,最近初接触,被指针绕晕了,

自己试了一下float *dataarray = new float[rnum,cnum];和float *dataarray = new float[cnum];都不报错,那这两句有什么区别?
而float *dataarray = new float[rnum][cnum];报错,这又是为什么?

追答

    *dataarray = new float[rnum,cnum];中[]中的写法是把rnum,cnum当一个逗号表达式了,只有后面的cnum起作用,和*dataarray = new float[cnum];等价,当然不报错了。

    float *dataarray = new float[rnum][cnum];这=号两边类型不匹配,我已经回答过你了。

追问

谢谢指导,怎样才能匹配

追答

float *dataarray = new float[rnum];或float *dataarray = new float[cnum];都是匹配的:=左边是float *型指针,=右边是开辟一个float字长*rnum的空间并把首地址强制为float型。但这样开辟的空间比你要求的二维数组的需要小得多。可以如下写也是匹配的,且能满足二维数组的空间要求:float *dataarray = new float[rnum*cnum];,但这样的话dataarray是一维数组指针,候要让它成为二维数组指针典型的应该这样:
float **dataarray=new float*[rnum];
for(int i=0;i<rnum;i++)
*(dataarray+i)=new float[cnum];

这样,dataarray就是二维数组的首地址了。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网