c - 不兼容的指针类型 - 试图从另一个函数修改数组

标签 c arrays pointers

我有一个数组:

char gameBoard[6][6];
// Initilize the array
for(int i = 0; i < 6; i++) {
    for(int o = 0;o < 6;o++) {
        gameBoard[i][o] = ' ';
    }
}

稍后在我的代码中,我尝试使用一个函数来修改这个数组:

void placePiece(char piece, char *gameBoard) {
    int x = 0;
    int y = 0;
    gameBoard[posXInArray][posYInArray] = piece;
}

我从与创建和初始化 gameBoard 数组的范围相同的范围调用该函数。

placePiece('X', gameBoard);

我这样做的警告:

warning: passing argument 2 of ‘placePiece’ from incompatible pointer type [enabled by default]
    placePiece('X', gameBoard);
    ^
note: expected ‘char *’ but argument is of type ‘char (*)[6]’
 void placePiece(char piece, char *gameBoard);

我对我做错了什么感到困惑?我假设从另一个函数修改数组我会传递指针,这样我就可以直接修改数组。这是不正确的吗?我还在调用中尝试了 &gameBoard 并显示了相同的警告消息。我猜我在做一些不正确的傻事?

最佳答案

你不能将二维数组传递给这个函数

void placePiece(char piece, char *gameBoard)

我认为这对你来说很好

void placePiece(char piece, unsigned int size, char gameBoard[size][size])

你可以这样使用它

placePiesce('X', 6, gameBoard);

或更好

placePiesce('X', sizeof(gameBoard) / sizeof(gameBoard[0]), gameBoard);

因为 gameBoard[0] 的类型是 char 这也可以工作

placePiesce('X', sizeof(gameBoard), gameBoard);

因为在那种情况下 sizeof(gameBoard[0]) == 1

关于c - 不兼容的指针类型 - 试图从另一个函数修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954978/

相关文章:

c - Ubuntu 中的 OpenGL(C 语言)说事情未声明

c - 多核和多 CPU 环境中的 mmap 线程安全

c++ - 检查彩虹数组(检查数组的反向样式是否与自身匹配)

c - 比较包含数字的字符串时出现问题

c++ - 棘手的方法 - 需要解决方案

arrays - 我将如何使用散列切片来初始化存储在数据结构中的散列?

c# - 无法将 uint* 转换为 uint[]

c - 了解结构中字符串的动态内存分配

类对象指针的 C++ vector

c - 在 Swift 中释放 C-malloc() 的内存?