你好,我是C组的新手,(交换矩阵的行)

5lhxktic  于 2023-06-21  发布在  其他
关注(0)|答案(1)|浏览(124)
#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

.我现在崩溃了。能帮我一下吗?

qaxu7uf2

qaxu7uf21#

你不能只交换整个数组而不按顺序交换它们的元素。
如果你想交换一个二维数组的两行,那么函数swap_mat可以如下所示

void swap_mat( int *a, int *b, size_t n ) 
{
    for ( size_t i = 0; i < n; i++ )
    {
        int tmp = a[i];
        a[i] = b[i];
        b[i] = tmp;
    }
}

函数的调用方式如下

swap_mat( mat[0], mat[1], 3 );

或类似

swap_mat( mat[0], mat[1], sizeof( mat[0] ) / sizeof( *mat[0] ) );

至于你的函数定义,那么在你的系统中使用的sizeof( int * )等于8,那么你就有了,例如表达式ppMat[0]产生的值在内部表示为对{ 2, 4 },而表达式ppMat[1]在内部表示为函数试图交换的对{ 6, 8 }

相关问题