#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap_mat(int** ppMat, int i, int j);
int main(void) {
int mat[][3] = { {2,4,6},{8,10,12},{14,16,18} };
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
printf("\n");
swap_mat((int**)mat, 0, 1);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
}
void swap_mat(int** ppMat, int i, int j) {
{
int* pTmp;
pTmp = ppMat[i];
ppMat[i] = ppMat[j];
ppMat[j] = pTmp;
}
}
我有一个矩阵。
2 4 6
8 10 12
14 16 18
我想交换1行2行。喜欢
8 10 12
2 4 6
14 16 18
但我得到的结果是
6 8 2
4 10 12
14 16 18
.我现在崩溃了。能帮我一下吗?
1条答案
按热度按时间qaxu7uf21#
你不能只交换整个数组而不按顺序交换它们的元素。
如果你想交换一个二维数组的两行,那么函数
swap_mat
可以如下所示函数的调用方式如下
或类似
至于你的函数定义,那么在你的系统中使用的
sizeof( int * )
等于8
,那么你就有了,例如表达式ppMat[0]
产生的值在内部表示为对{ 2, 4 }
,而表达式ppMat[1]
在内部表示为函数试图交换的对{ 6, 8 }
。