将多维数组传递到函数和编辑值

时间:2015-04-29 14:50:01

标签: c arrays

我正在创建一个简单的wordsearch生成器,但是在通过函数传递二维数组并编辑内部值时遇到了问题。我已经在main中声明了我的数组:

char tableValues[xsize-1][ysize-1];

我用 - in main填充数组中的每个点,然后将其传递给一个用随机字母填充数组并返回的函数。

void fillTable(char *tableValues){
    for ( int i = 0 ; i < xsize ; i++ ){
        for ( int j = 0 ; j < ysize ; j++ ){
            if ( tableValues[i][j]=='-')
                tableValues[i][j] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand () % 26];
        }
    }
}

我的问题是错误会在&#34; tableValues [i] [j]&#34;部分,我不知道我怎么用指针编辑数组中的各个点。非常感谢任何帮助,谢谢

我将我的功能称为

fillTable((char *)tableValues);

3 个答案:

答案 0 :(得分:1)

尝试this

void fillTable(char *tableValues){
for ( int i = 0 ; i < xsize ; i++ ){
    for ( int j = 0 ; j < ysize ; j++ ){
        if ( *((tableValues +i*(xsize-1))+j)=='-')
            *((tableValues+i*(xsize-1))+j) = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand () % 26];
    }
}
}

答案 1 :(得分:1)

您正在传递一个2d数组,并且该函数需要一个指向char的指针,该指针不兼容,特别是使用两个下标运算符访问它是错误的,您需要将您的函数签名更改为

char (int xsize, int ysize, char array[xsize][ysize])
 { 
 }

不要将xsizeysize声明为全局变量,只需将它们传递给函数,这样函数就可以重复使用,否则在函数中几乎没有什么好处。 / p>

答案 2 :(得分:0)

该功能应定义为

void fillTable( char ( *tableValues )[ysize-1], int rows )
{
    for ( int i = 0 ; i < rows ; i++ )
    {
        for ( int j = 0 ; j < ysize - 1 ; j++ )
        {
            if ( tableValues[i][j] == '-' )
                tableValues[i][j] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand () % 26];
        }
    }
}

前提是ysize是某个定义的常量。

否则,如果您的编译器支持可变长度数组,则可以将其定义为

void fillTable( int rows, int cols, char tableValues[rows][cols] )
{
    for ( int i = 0 ; i < rows ; i++ )
    {
        for ( int j = 0 ; j < cols ; j++ )
        {
            if ( tableValues[i][j] == '-' )
                tableValues[i][j] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand () % 26];
        }
    }
}