填充传递给函数的二维数组

时间:2014-12-30 10:30:33

标签: c++ c

我尝试填充一个二维数组,我传递给一个函数,但我无法让它工作。这是我的代码:

#define ROW    3
#define COLUMN 3
#define EMPTYFIELD ' '

void fillField( char** data, int row, int column );

int main( void )
{
    // Two dimensional array
    char field[ROW][COLUMN];
    fillField( field, ROW, COLUMN );
    return( 0 );
}

void fillField( char** data, int row, int column )
{
    for( int r = 0; r < row; r++ )
    {
        for( int c = 0; c < column; c++ )
        {
            *data = EMPTYFIELD;
            data++;
        }
    }
}

我收到以下错误:

In function ‘int main()’:
main.cpp:11:32: error: cannot convert ‘char (*)[3]’ to ‘char**’ for argument ‘1’ to ‘void fillField(char**, int, int)’
  fillField( field, ROW, COLUMN );
                                ^
main.cpp: In function ‘void fillField(char**, int, int)’:
main.cpp:21:9: error: invalid conversion from ‘char’ to ‘char**’ [-fpermissive]
    data = EMPTYFIELD;
         ^
Makefile:208: recipe for target 'main.o' failed
make: *** [main.o] Error 1

我该如何解决这个问题?我将不胜感激任何帮助!提前谢谢。

2 个答案:

答案 0 :(得分:0)

char **data;

双指针不是2D数组,你应该有类似

的东西
void fillField(char data[][3],int row,int column);

因为传递的参数field是2D数组而不是指针。

答案 1 :(得分:0)

您需要取消引用data两次。这将解决您的问题:

for( int r = 0; r < row; r++ )
{
    for( int c = 0; c < column; c++ )
    {
        data[r][c] = EMPTYFIELD;
    }
}

但是,正如其他答案所说,使用**传递二维数组是一个坏主意。