家庭风波作文怎么写:(C语言)返回指向数组的指针的函数

来源:百度文库 编辑:高考问答 时间:2024/05/01 02:30:53
我要调用一个函数createMatrix()创建一个二维数组,这个二维数组有line行row列,返回的是这个二维数组的地址
double *createMatrix(long line,long row)
{
double *matrix=(double *)malloc(sizeof(double)*line*row);
return(matrix);
}
可是这样返回的话不就是一个一维数组了吗!
要怎样才能返回一个二维数组(按上面的话第一维是row)呢?

这样写对吗?可是这样不能编译啊?不知道要怎样改!晕!
double *createMatrix(long line,long row)
{
double *matrix=(double *)malloc(sizeof(double)*line*row);
return((double (*)[row])matrix);
}
我也知道第一种方法是正确的、可是这种方法不能用matrix[2][2]这样的形式来表达,而只能用matrix[2]这样的形式来表达,我要的就是可以用matrix[2][2]这样的形式来表达的二维数组,而且希望大家不要把我当成初学者,那些首地址的知识我也懂,我学C语言已经很长时间了

第二种方法是因为类型不匹配(double*与(double(*)[ROW])产生错误,而且
((double (*)[row])matrix);
里的[row]是一个变量,而指向数组的指针
double (*matrix)[ROW]里的ROW只能使用常量,所以这里也有一个错误。
由于指向数组的指针指向的数组长度(即第一维)必须是确定的常量,所以你这种行列皆不确定的数组不能用这种形式返回。

我觉得用第一种形式好一点,访问二维数组a[i][j]可以转换成访问一维数组a[i*row+j];//row是列数

如果非要返回二维数组的话,我想用指针数组会好一点,不过分配空间的时候就麻烦一点。

指针就是指像二维数组的首地址

所谓指向数组的指针都是保存数组首地址 ,即0行0列的地址,这个地址也是0行的一维数组的首地址,第一种方法就是正确的

我觉得第一中方法就很好!!!!