我正在创建一个通过函数转置矩阵的代码。然而,当我运行此代码时,它会打印原始矩阵,但它会关闭而不打印转置矩阵。我几乎可以肯定问题出在转置函数内部的归因上,但我无法理解它。
#include <stdio.h>
#include <stdlib.h>
//Here I create a function to transpose the matrix
//I receive a pointer to a double matrix
void transpose(double *matrix[][5], int size)
{
//I create a second matrix
double transposed[size][5];
//I transpose the original matrix into the transposed matrix
for (int i=0; i<=size-1; i++)
{
for (int j=0; j<=4; j++)
{
transposed[j][i] = *matrix[i][j];
}
}
//I attribute the values from the transposed matrix to the original matrix
for (int i=0; i<=size-1; i++)
{
for (int j=0; j<=4; j++)
{
*matrix[i][j] = transposed[i][j];
}
}
}
int main()
{
//Here I create a matrix and ask for the user to type its values
double matrix[5][5];
for (int i=0; i<=4; i++)
{
for (int j=0; j<=4; j++)
{
printf("Position [%d][%d]", i+1, j+1);
scanf("%lf", &matrix[i][j]);
}
}
//I use the function
//I print the matrix after using the function
transpose(matrix, 5);
printf("Transposed:\n");
for (int i=0; i<=4; i++)
{
for (int j=0; j<=4; j++)
{
printf("%lf ", matrix[i][j]);
}
printf("\n");
}
}
最佳答案
有关“间接级别”的编译器警告应该已经提醒您了。该函数应该是
void transpose(double matrix[][5], int size)
和其他*
星星也应该被删除。
transposed[j][i] = matrix[i][j];
...
matrix[i][j] = transposed[i][j];
<小时/>
旁白:你的循环控制限制不是惯用的。这个i<=size-1;
更好的是 i<size;
(并且可能是错误的)。
您对限制进行了硬编码,例如 j<=4
目前尚不清楚这实际上是 5-1
如果您使用过 j<5
更明显的是它是相同的 5
就像在数组维度中一样。
您是否应该决定将该维度替换为 #define
或const int
值,你必须寻找 4
以及 5
s。
关于c - 如何从函数中的矩阵指针赋予值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58456307/