无效类型';int[int]';对于C中的数组下标错误?
我正在尝试分割我的矩阵2by2平方矩阵。但我有一个编译错误,不知道为什么。我的代码:无效类型';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 = (
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++问题。