首页 > 解决方案 > 如何交换使用指向数组的指针定义的二维数组中的行?

问题描述

我想交换定义如下的二维数组的两行。

    double (*mat)[N];
    mat = (double(*)[N])malloc(m*sizeof(double [N]));
    ...
    swap(mat, mat+1); 

但我swap(mat, mat+1);只交换每行中的第一个元素。

void swap(double **a,double **b){
    double *temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

如果我使用一个double **mat;用动态分配的行和行定义的二维数组,则相同的交换工作。

标签: carraysswappointer-to-array

解决方案


void swap(double **a,double **b)

它之所以有效,是因为在这种情况下,您交换了指针。但是当你声明:

double (*mat)[N];

它是一个指向数组的指针。这就是为什么它只是交换每行的第一个值的原因。

如果要交换两个数组,只需使用指针(不要使用双指针):

void swap( double *m1, double *m2, size_t n )
{
    for ( size_t i = 0; i < n; i++ )
    {
        double tmp = m1[i];
        m1[i] = m2[i];
        m2[i] = tmp;
    }
}

然后当你想交换两行时:

swap(mat[0], mat[1], N);

推荐阅读