Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的代码做我没有做的作业';你不会写吗?_C_Arrays - Fatal编程技术网

C 为什么我的代码做我没有做的作业';你不会写吗?

C 为什么我的代码做我没有做的作业';你不会写吗?,c,arrays,C,Arrays,我的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 fic

我的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;
    }

我希望你能帮助我。

tablero[2][2]
是一个2乘2的数组。因此,这四个元素是[0][0]、[0][1]、[1][0]和[1][1]。没有[0][2]或[1][2]元素

如果尝试使用索引2,它将超出行或列的界限,并可能换行到下一行/列,或者它将完全访问数组外的内存,并可能导致程序崩溃


要使用从0到2的元素索引,您需要一个3乘3的数组。

问题是数组的可接受索引在[0,1]范围内。数组逐行放置在内存中。因此,数组在内存中的表示形式为

tablero[0][0] tablero[0][1]
tablero[1][0] tablero[1][1]

当您尝试使用索引[0][2]访问数组的元素时,编译器将addres计算为0*sizeof(int[2])+2*sizeof(int)(前提是arrray的元素类型为int)。因此,它将计算与索引[1][0]对应的元素的地址。

什么是
i
j
?…修复了,我错拼了您的数组2x2?如果是这样,您不应该将其赋值为3x3。如果您输入
-42
,会发生什么情况?@alk这就是为什么函数
compobar\u hueco(pos\u x,pos\u y)
存在的原因,但是如果tablero是[2][2],它没有3个空格吗?0,1,2?不,如果您像
int array[2][2]
那样定义表,那么这是一个2x2数组。只有最高为0和1的索引存在。@Patxiku:OT:您所谓的“空格”称为“元素”。@Patxiku No。正确的索引应该是[0][0]、[0][1]、[1][0]和[1][1]@Patxiku No。键入[2],您定义了一个大小为[2]的数组,这意味着您在该数组中有2个元素。数组索引从[0]开始。因此[0]和[1]将是相应的索引。至于你的二维数组“tablero”,Boann做了必要的解释。