函数返回一个指向二维数组的指针

问题描述 投票:0回答:1

我有一个工作正常的代码

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 function pointers
1个回答
0
投票

对于符合 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]; 
© www.soinside.com 2019 - 2024. All rights reserved.