C++ 填充传递到函数中的二维数组
我试图填充一个二维数组,我把它传递给一个函数,但我无法让它工作。这是我的密码:C++ 填充传递到函数中的二维数组,c++,c,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,
#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++;
}
}
}
我怎样才能解决这个问题?我将感谢任何帮助!提前谢谢
char **data;
双指针不是2D数组吗
void fillField(char data[][3],int row,int column);
因为传递的参数
字段
是一个2D数组而不是指针。您需要取消对数据的引用两次。这将解决您的问题:
for( int r = 0; r < row; r++ )
{
for( int c = 0; c < column; c++ )
{
data[r][c] = EMPTYFIELD;
}
}
for(int r=0;r|
但是,正如其他答案所说的,用<代码> **<代码>传递二维数组是个坏主意。实际上这是C++,但我将它编译成C++程序,因为我可以在FROLCAR中初始化变量。基于动态堆栈的数组在标准C++中是不可用的。为什么不使用-std=c99
选项在c99
模式下编译它,该模式允许在中为循环声明变量,您可以删除列
参数。@Jarod42抱歉,没有告诉您错误是因为将2D数组传递给双指针,所以我在回答中提到,您是说原型中的参数列
不是必需的吗?是的,我说列参数是多余的。@Jarod42 Yes只是将它保持在那里,以便与OP的函数原型同步。我很可能会去掉参数行和列,因为它们已经存在于#define
中,可以在函数内部使用
for( int r = 0; r < row; r++ )
{
for( int c = 0; c < column; c++ )
{
data[r][c] = EMPTYFIELD;
}
}