我有一个工作正常的代码
double *foo (int i, int j){
double *aux;
do something
return aux;
}
void main ( void){
double *MM[MAX_X][MAX_Y];
..
..
// Calc as MM
for (i = 0; i < MAX_X; i++)
for (j = 0; j < MAX_Y; j++ )
MM[i][j] = foo (i,j);
}
我想把循环放在一个函数里
double *foo (int i, int j){
double *aux;
do something
return aux;
}
double ***calc_MM ( some input ) {
int i,j;
double ***MM;
for (i = 0; i < MAX_X; i++)
for (j = 0; j < MAX_Y; j++ )
MM[i][j] = foo (i,j);
return MM;
}
void main ( void){
double *MM[MAX_X][MAX_Y];
..
..
// Calc as MM
MM = calc_MM ( some input )
}
MAX_X 和 MAX_Y 是#define 常量,稍后将从 envp 中读取
对不起,如果我不清楚,但我必须使用 MM,如果我可以从函数传递和返回它,它将变得更加模块化。
我需要一些帮助来定义
double *MM[MAX_X][MAX_Y];
所以我从函数传递并返回它
我尝试了 * 和 const * 等的一些组合,但我总是遇到编译错误
从具有不兼容返回类型“double ** const”的函数返回“double * ()[35]”[-Werror=incompatible-pointer-types]
我想这个可以回答我的问题,但我不明白 指定一个指向二维数组的指针
对于符合 C 标准的启动器,不带参数的函数 main 应声明为
int main( void )
{
double *MM[MAX_X][MAX_Y];
..
..
// Calc as MM
MM = calc_MM ( some input )
}
调用函数 calc_MM 的地方
calc_MM ( MM )
那么无论如何这个声明
MM = calc_MM ( some input )
无效,因为数组没有赋值运算符。
尽管如此,如果您想返回指向传递数组的第一个元素的指针,那么函数声明将如下所示
double * ( * calc_MM( double *MM[MAX_X][MAX_Y] ) )[MAXY];