【问题标题】:Modify a 2D array using passing by reference in C使用 C 中的引用传递修改二维数组
【发布时间】:2016-03-19 05:54:16
【问题描述】:

我一直在做一个简单的 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 时更改。问题是该功能不会改变它。数组的声明位于 main 函数中。

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);

【问题讨论】:

  • main中的二维数组是如何声明的?
  • @matts 这是第二段代码(不确定你是不是这个意思)

标签: c arrays function arguments


【解决方案1】:

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

cargar_partida(&opcion, tabla);

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

这应该可以工作

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

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

【讨论】:

  • 它还需要fscanf(archivo, "%d", &amp;tablanueva[i][j]);,注意&amp;
  • 刚刚尝试了@matts 所说的并使用了&。现在编译器没有给我任何警告,但值没有正确更改,它总是打印相同的初始数组,而不是我保存在 txt 文件中的那个。
  • @101010 那我怎么读完所有这些?我以为 bucle 的替身正在这样做(?)
猜你喜欢
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
相关资源
最近更新 更多