使用C中的引用传递修改2D数组

时间:2015-12-13 19:33:45

标签: c arrays function arguments

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

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

1表示可以占用的空白区域,0表示无法占用的空白区域,2表示白色块,3表示黑色空白区域。 FIL和COL值为8。

这里的功能是:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<nav class="navbar navbar-inverse navbar-fixed-top " role="navigation">
  <div class="container">

    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-nav" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
    </div>

    <div class="collapse navbar-collapse" id="bs-nav">
      <ul class="nav navbar-nav">
        <li><a href="#">Home</a>
        </li>
        <li><a href="#">About</a>
        </li>
        <li><a href="#">Portfolio</a>
        </li>
        <li><a href="#">Contact</a>
        </li>
      </ul>
    </div>
  </div>
</nav>

变量 turno (英文翻译)正确加载,但2D数组​​ tablanueva (新数组)不是。

注意:在文件 partida.txt 中,变量 turno 是第一个到apear,另一个值是apear在不同的行中。

这是初始数组,在调用 cargar_partida 时必须更改。问题是该功能没有改变它。数组的声明位于main函数中。

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

}
}

这是函数的调用方式。

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},
  };

1 个答案:

答案 0 :(得分:0)

您正在传递双指针(tabla)作为

中的参数
cargar_partida(&opcion, tabla);

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

这应该有效

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

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