【问题标题】:Passing and returning 2D arrays in C在 C 中传递和返回二维数组
【发布时间】:2017-03-27 12:45:00
【问题描述】:

我完全没有用 C 编写代码,所以我很难用指针指向 2D 数组。我有一个整数类型的 3x3 二维数组。

这是我尝试使用的方法:

 void addMoveToBoard(int *gameArray[3][3], int a, int b, int player) {
        *((int *)gameArray + x * 3 + y) = player;
        if (a == 0) {
            mvaddch(a, b, 'X');
        }
    ...
    }

这是我的主要内容:

int *board[3][3] = {{0,0,0},{0,0,0},{0,0,0}};
addMoveToBoard(board, 0, 0, 1);

第一个问题是当我为第二个和第三个参数传递零时,当我在函数中使用它们时它们不是 0。使用 mvaddch(a,b, 'X') 时,a 和 b 似乎是 1 而不是 0。我是否正确地为游戏数组中的元素赋值?

【问题讨论】:

  • int *board[3][3] 声明了一个由三个指针组成的数组。我怀疑这不是你想要的。
  • 请出示真实代码。并将其显示为minimal reproducible example。您的代码引用了未定义的变量,例如 xy,而您的问题引用了代码,例如 mvaddch,甚至没有显示。

标签: c arrays multidimensional-array parameters computer-science


【解决方案1】:

将您的函数签名更改为不带*

void addMoveToBoard(int gameArray[3][3], int a, int b, int player)

现在只写:

gameArray[x][y] = player;

主要是:

int board[3][3] = {{0,0,0},{0,0,0},{0,0,0}};

其他都还好。重要的是要知道编译器会看到您使用数组并将其作为指向函数的指针传递。该函数接收一个指向板数组的指针,当您将其索引为 [x][y] 时,编译器“知道要做什么”。

【讨论】:

  • 对于分配,他可以改为gameArray[x][y] = player;
  • 请注意,函数addMoveToBoard中的sizeof(gameArray)是指针的大小,而sizeof(board)9 * sizeof(int)
  • 谢谢伙计,我认为它必须是一个指针,正如你所知道的那样,我还不太了解 C。 Java 是我的主要语言,所以指针对我来说很痛苦。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 2021-12-24
  • 2014-12-22
  • 2015-05-30
  • 2013-01-02
  • 1970-01-01
相关资源
最近更新 更多