c - 使用指针查找矩阵的转置(我的代码有什么问题?)

标签 c pointers

你能告诉我下面代码中我的逻辑有什么问题吗?我正在尝试对矩阵进行转置,但输出出现严重错误。例如,我在主函数中启动了一个矩阵:

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/

相关文章:

c - 线程程序发生段错误

c - 如何从 C 函数中的三个输入创建多项式函数?

C 数独解算器崩溃并返回进程 -1073741819 (0xC000005)

c - c中最有效的指针算术类型

java - Java 中的 Char 指针

您可以允许几种类型的指针之一作为参数而不使用 void* 吗?

c - 结构中的 (file_t)(-1),0 是什么意思?

c - 在 C 中分配给复数的实部或虚部

c - libgcc.a 和 libgcc_s.a 之间的区别?

c - 将加密文件中的二进制数据写入指定的内存位置