【问题标题】:invalid types 'int[int]' for array subscript error in C?C中数组下标错误的无效类型'int [int]'?
【发布时间】:2015-11-05 12:31:52
【问题描述】:

我正在尝试将我的矩阵分割为 2×2 方阵。但我遇到了编译错误,不知道为什么。我的代码:

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

错误是

37 36 [错误] 数组下标的无效类型 'int[int]' 为什么会出现这个错误?

【问题讨论】:

  • 您是否尝试过...谷歌搜索?
  • 我已经尝试过了,但我无法解决问题
  • 真的是复制品吗?接受的答案在 C++ 和 c 之间划清界限。但是看看那里的三个答案不会有什么坏处,@pseudocode - 尽管它是一个 C++ 问题,但也许其中一个可以帮助你

标签: c matrix compiler-errors


【解决方案1】:

问题是你对matrix的声明:

int *matrix = ...

这将matrix 声明为指向int 的指针,或者等效地声明为指向一维int 数组的指针。因此,表达式matrix[l]int-valued。您不能将第二个[k] 索引应用于int

要做你想做的事,你需要一个指向二维数组的指针。这样做的方法如下:

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

这里p 是指向a 的指针,因此您可以像引用a 一样引用p,例如p[i][j].

【讨论】:

    【解决方案2】:

    矩阵已被声明为 int* 但被用作 int[][]

    要修复,请使用

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

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 1970-01-01
      • 2022-01-05
      • 2015-09-26
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多