我目前正在构建一个矩阵计算器(需要使用指针),作为我C语言入门作业的一部分,我目前正在尝试创建一个转置3x3矩阵的选项(将矩阵的行与列交换)。
然而,当我对矩阵应用函数时,它没有任何变化。
下面是转置函数的代码。
void transposeMatrix(int matrix[3][3]) {
int row;
int col;
int temp = 0;
for (row = 0; row<3; row++) {
for (col = 0; col < 3; col++) {
temp = *(*(matrix+row)+col);
*(*(matrix+row)+col) = *(*(matrix+col)+row);
*(*(matrix+col)+row) = temp;
}
}
}
它只是一个带有temp变量的标准交换算法。
下面是打印函数的代码
void printMatrix(char *desc,int matrix[3][3]) {
int row;
int column;
printf("matriks %s:\n",desc);
for (row = 0; row < 3; row++) {
for (column = 0; column < 3; column++) {
printf(" %d", matrix[row][column]);
}
printf("\n");
}
}
下面是我如何调用这个函数:
int sampleM1[3][3] = {{2,2,4}, {1,1,1}, {1,1,1}};
printMatrix("before transposition", sampleM1);
transposeMatrix(sampleM1);
printMatrix("after transposition" , sampleM1);
整个操作的输出是sampleM1根本没有变化,有什么方法可以解决这个问题吗?
1条答案
按热度按时间zysjyyx41#
正如上面提到的@TomKarzes,您访问了矩阵的同一个索引两次,并通过在行+ 1开始内部循环来避免这种情况。您提到您需要使用指针语法,这很好,
swap()
现在将丑陋的地方(参数)本地化。下面是上面的输出: