你能告诉我下面代码中我的逻辑有什么问题吗?我正在尝试对矩阵进行转置,但输出出现严重错误。例如,我在主函数中启动了一个矩阵:
int a[2][2];
a[0][0]=1;
a[0][1]=2;
a[1][0]=3;
a[1][1]=4;
int *a1;
a1=&a[0][0];
然后做
transpose(a1,2,2);
输出给出:[16, 16]
, [3, 16]
。但是输出应该是 [1 , 3]
, [2 , 4]
。
int* transpose(int *a,int m,int n)
{
int i,j;
int tmp;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
*(a + i*m + j) = tmp;
*(a + i*m + j) = *(a + i + j*m);
*(a + i + j*m) = tmp;
}
}
return a;
}
最佳答案
您在交换中的第一个分配是错误的方式,因此您正在处理未分配的 tmp
变量的值。您的交换代码应显示为
tmp = *(a + i*m + j);
*(a + i*m + j) = *(a + i + j*m);
*(a + i + j*m) = tmp;
关于c - 使用指针查找矩阵的转置(我的代码有什么问题?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165839/