gpt4 book ai didi

c - 在 C 中使用指针转置矩阵

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:32 28 4
gpt4 key购买 nike

我正在做作业以使用指针转置矩阵。我的代码可以成功转置矩阵的第一行,但无法转置其他行和列。我怀疑 for 循环存在一些问题,但我找不到问题出在哪里。以下附件是我的代码。

void transposeMatrix(int matrix[ROWS][COLS]){
int** transpose=(int **)malloc(ROWS*sizeof(int*));
for(int i=0; i< ROWS; i++)
transpose[i]=(int*)malloc(COLS*sizeof(int));

for(int i=0; i<ROWS;i++){
puts("");
for(int j=0; j<COLS;j++){
*(transpose+i*ROWS+j)= *(matrix+j*COLS+i);
printf("%d ",transpose[j][i]);
}
puts("");
}
}

矩阵生成随机数,问题如下所示:

Original Matrix:
10 20 30
40 50 60
70 80 90

Transpose Matrix:
10 0 43009213
20 3401401 910429
30 0 134910124

我无法附上图片,所以以上只是对我遇到的问题的阐述,实际情况并不完全一样,但非常相似。

感谢您的帮助!

最佳答案

*(transpose+i*ROWS+j) 不是访问指针数组元素的正确方法。这是访问以行优先顺序连续存储在 int[] 数组中或通过 int* 指针的二维数组的方法。

访问作为指针数组实现的二维数组元素的方法是使用 *(*(transpose + i)+j)*(transpose + i) 返回指向行 i 的指针,添加 j 返回 j 的地址> 行中的第 列,以及获取或设置值的引用。

这也适用于声明为的数组

int matrix[ROWS][COLS];

因为数组衰减为指针的方式。

所以你的赋值线应该是:

        *(*(transpose + i)+j) = *(*(matrix + j)+i);

然后您需要更改 printf() 行,因为它打印的不是您刚刚指定的相同元素。应该是:

        printf("%d ", transpose[i][j]);

完整的工作函数是:

void transposeMatrix(int matrix[ROWS][COLS]){
int** transpose=(int **)malloc(ROWS*sizeof(int*));
for(int i=0; i< ROWS; i++)
transpose[i]=(int*)malloc(COLS*sizeof(int));

for(int i=0; i<ROWS;i++){
puts("");
for(int j=0; j<COLS;j++){
*(*(transpose + i)+j) = *(*(matrix + j)+i);
printf("%d ",transpose[i][j]);
}
puts("");
}
}

关于c - 在 C 中使用指针转置矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54917715/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com