我的数组tablero [2] [2]是空的。当我尝试在[0] [2]或[1] [2]位置分配一个数字时,[1] [0]和[2] [0]位置也是对齐的。我不知道为什么会发生这种情况
void introducir_ficha(){
int valido = 0;
int pos_x, pos_y;
while(valido == 0){
printf("Introduce la posicion que quieres para la ficha \n");
scanf("%d",&pos_x);
printf("\n");
scanf("%d",&pos_y);
if(pos_x > 2 || pos_y > 2){
printf("La posicion no es valida... \n");
}else{
valido = comprobar_hueco(pos_x, pos_y);
//comprobar_hueco just returns if this position is empty or not
if(valido == 0){
printf("La posicion no es valida... \n");
}
}
}
printf("Posiciones %d %d \n",pos_x,pos_y);
tablero[pos_x][pos_y] = 1;
}
我希望你能帮助我。
答案 0 :(得分:9)
tablero[2][2]
是一个2乘2的数组。因此,四个元素是[0] [0],[0] [1],[1] [0]和[1] [1]。没有[0] [2]或[1] [2]元素。
如果您尝试使用索引2,它将超出行或列的边界,并可能包装到下一行/列,或者它将完全访问数组外部的内存并可能导致程序崩溃。 / p>
要使用0到2之间的元素索引,您需要一个3乘3的数组。
答案 1 :(得分:1)
问题是数组的可接受索引在[0,1]范围内。数组逐行放在内存中。所以你的数组将在内存中表示为
tablero[0][0] tablero[0][1]
tablero[1][0] tablero[1][1]
当您尝试使用索引[0] [2]访问数组的元素时,编译器会将地址计算为0 * sizeof(int [2])+ 2 * sizeof(int)(假设元素类型为arrray是int)。结果,它将计算与索引[1] [0]
对应的元素的地址