我尝试填充一个二维数组,我传递给一个函数,但我无法让它工作。这是我的代码:
#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
我该如何解决这个问题?我将不胜感激任何帮助!提前谢谢。
答案 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;
}
}
但是,正如其他答案所说,使用**
传递二维数组是一个坏主意。