c - 在 C 中使用引用传递修改二维数组

标签 c arrays function arguments

我一直在开发一个简单的 C 跳棋游戏。

我希望函数cargar_partida(加载游戏)读取一个文本文件,其中包含代表游戏中每个位置的数字列表(总共 64 个)。

1代表可以占据的空白,0代表不能占据的空白,2为白棋,3为黑棋。 FIL和COL值为8。

这是函数:

int cargar_partida(int *turno, int *tablanueva[FIL][COL]) {

int i, j;
FILE * archivo;

archivo = fopen("partida.txt", "r");

if (archivo == NULL) {
    printf("Error al abrir el archivo.\n");
    exit(0);
}

fscanf(archivo, "%d", turno);

for (i = 0; i < FIL; i++) {
    for (j = 0; j < COL; j++) {
        fscanf(archivo, "%d", tablanueva[i][j]);
    }

}
}

变量turno(转成英语)已正确加载,但二维数组tablanueva(新数组)未正确加载。

注意:在文件 partida.txt 中,变量 turno 是第一个出现的值,其他值分别出现在不同的行中。

这是初始数组,在调用 cargar_partida 时必须更改它。问题是该函数不会改变它。数组的声明位于主函数中。

int tabla[FIL][COL] = {
    {0, N, 0, N, 0, N, 0, N},
    {N, 0, N, 0, N, 0, N, 0},
    {0, N, 0, N, 0, N, 0, N},
    {VAL, 0, VAL, 0, VAL, 0, VAL, 0},
    {0, VAL, 0, VAL, 0, VAL, 0, VAL},
    {B, 0, B, 0, B, 0, B, 0},
    {0, B, 0, B, 0, B, 0, B},
    {B, 0, B, 0, B, 0, B, 0},
  };

这就是函数的调用方式。

cargar_partida(&opcion, tabla);

最佳答案

您正在将双指针(tabla)作为参数传递给

cargar_partida(&opcion, tabla);

该函数需要一个指向二维数组的指针(三重指针)。因此,您必须更改函数中第二个参数的类型。

这应该有效

int cargar_partida(int *turno, int tablanueva[FIL][COL])

如果不起作用,请告诉我们。

关于c - 在 C 中使用引用传递修改二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34255382/

相关文章:

javascript - 使用 AngularJs 从数组中删除对象的最佳方法

c - 与数字进行比较是否总是需要 ASCII 格式?

php - 将 mysql 列转换为 php 数组并回显它

php - 如何在 IF 语句中使用 php 函数

javascript - "Unexpected end of input"- 代码学院剪刀石头布

在没有无关信息的情况下编译

c - 使用给定的 url 在 Curl 中没有下载文件

javascript - 在检测个位数整数时转换毫秒

c - 在冒泡排序中使用第二个for循环

c - 请问,为什么当我运行此代码时,会打印出额外的 "n"?