【发布时间】:2019-07-21 21:32:34
【问题描述】:
我正在做使用指针转置矩阵的任务。我的代码可以成功转置矩阵的第一行,但无法转置其他行和列。我怀疑 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
我无法附上图片,所以上面只是对我遇到的问题的阐述,实际情况并不完全如此,但非常相似。
感谢您的帮助!
【问题讨论】:
-
很好奇,为什么代码在
int** transpose=(int **)malloc(ROWS*sizeof(int*));和(int*)中使用(int **)转换(int*)malloc(COLS*sizeof(int))? -
*(transpose+i*ROWS+j)= *(matrix+j*COLS+i)正在分配一个指针。你确定要那个? -
@chux 你是想说don't cast malloc吗?
-
您正在分配给
transpose[i][j],但您正在打印transpose[j][i]。 -
@Barmar 我尝试将它们翻转过来,但问题仍然存在。我不明白这些奇怪的数字是从哪里来的以及如何解决它们。我对 C 语言和指针真的很陌生,所以我现在很困惑。