无效类型';int[int]';对于C中的数组下标错误?

无效类型';int[int]';对于C中的数组下标错误?,c,matrix,compiler-errors,C,Matrix,Compiler Errors,我正在尝试分割我的矩阵2by2平方矩阵。但我有一个编译错误,不知道为什么。我的代码: int main() { int rowsize,n,i,j,l,k, var=0,var2=0,count = 0,square2by2[2][2]; printf("Size of square matrix: " ); scanf("%d",&n); rowsize=n; int *matrix = (

我正在尝试分割我的矩阵2by2平方矩阵。但我有一个编译错误,不知道为什么。我的代码:

    int main()
    {
        int rowsize,n,i,j,l,k, var=0,var2=0,count = 0,square2by2[2][2];
        printf("Size of square matrix: " );
        scanf("%d",&n);
        rowsize=n;
        int *matrix = (int *)malloc(rowsize * rowsize * sizeof(int));
        for (i = 0; i <  rowsize; i++)
          for (j = 0; j < rowsize; j++)
             *(matrix + i*rowsize + j) = ++count;

        for (i = 0; i <  rowsize; i++)
         {
            for (j = 0; j < rowsize; j++)
            {
                printf("%d ", *(matrix + i*rowsize + j));
            }
            printf("\n");
         }
         for( i=0, l=var2 ;i<2 , l<var2+rowsize ;i++,l++)
        {
            for( j=0 , k=var ; j<2, k<var+2 ;j++,k++)
            {
                square2by2[i][j]=matrix[l][k]; // error line
            }

            if(i==1)
            {
                var++;
                if(var==rowsize-1) 
                {
                    printf("\n");
                    for(int x=0;x<2;x++)
                    {
                        printf("\n");
                        for(int y=0;y<2;y++)
                        {
                            printf("%d\t",square2by2[x][y]);
                        }
                    }
                    var = 0;
                    i-=2;
                    l-=1;
                    if(l==rowsize+1) 
                    {
                        break;
                    }
                }
                else
                {
                    i-=2;
                    l-=2;
                    printf("\n");
                    for(int x=0;x<2;x++)
                    {
                        printf("\n");
                        for(int y=0;y<2;y++)
                        {
                            printf("%d\t",square2by2[x][y]);
                        }
                    }
                }

            }
return 0;
        }
intmain()
{
int rowsize,n,i,j,l,k,var=0,var2=0,count=0,square2by2[2][2];
printf(“方形矩阵的大小:”);
scanf(“%d”和“&n”);
行大小=n;
int*matrix=(int*)malloc(rowsize*rowsize*sizeof(int));
对于(i=0;i对于(i=0,l=var2;i而言,问题在于您对
矩阵的声明:

int *matrix = ...
这将
矩阵
声明为指向
int
的指针,或等效为指向一维
int
数组的指针。因此表达式
矩阵[l]
的值为
int
。不能将第二个
[k]
索引应用于
int

要执行您试图执行的操作,您需要一个指向二维数组的指针。以下是您可以执行此操作的方法:

int a[dim1][dim2];
int (*p)[dim2] = a;    // The parentheses are necessary!

这里的
p
是指向
a
的指针,因此您可以像引用
a
一样引用
p
,例如
p[i][j]
矩阵已声明为int*但被用作int[]

修理,使用

square2by2[i][j]=matrix[l * rowsize + k];

你尝试过…谷歌吗?我已经尝试过了,但我无法解决的问题是,这真的是一个复制品吗?这个被接受的答案在C++和C之间划出了一条线,但是在那里查三个答案不会有什么坏处,“伪代码——也许它中的一个可以帮助你,尽管它是C++问题。