使用交换函数交换2D数组指针中的地址

时间:2018-03-25 12:52:36

标签: c arrays pointers 2d swap

对于作业,我需要为n个矢量数组制作一个排序算法。赋值特别告诉我不要交换指针所指向的值,而是交换存储在这些指针中的地址。然后使用这些指针打印结果。

我的问题是我似乎无法完成交换指针所包含的地址。我搜索了SO以寻找相关问题,但它们几乎都改变了指针指向的值。

到目前为止,我有这个:

交换功能

void swap(double **p, double **q, int i, int j){

double* tmp;

tmp = &p;
*p= &q;
*q = tmp;
printf("\tSwapped [%d][%d] and [%d][%d]\n", i,j, (i-1), j);}

我的主要功能

int main (void){
int dim, num, *tmp;
int i, j, a;
double **w;
scanf("%d %d", &dim, &num);        /* read the dimension and amount of array*/                                                                  

w = calloc(num, sizeof(double *)); /* allocate array of num pointers */
for (i = 0; i<num; i++)
{
    /*allocate space for a dim-dimensional vector */
    w[i] = calloc(dim, sizeof(double));
    /* read the vector */
    for (j = 0; j < dim; j++)
    {
        scanf("%le", &w[i][j]);
    }
}

a = 0;
while (a <= num)
{
    /*sort num times*/
    i = (num -1);
    while(i != 0)
    {
        if ((argument1) > (argument2) )
        {   /*swap each columns of the rows individually*/
            printf("\tSwapping..\n");
            for(j = 0; j<dim; j++)
            {
                swap(&w[i][j], &w[i-1][j], i, j);
            }
        }
        i--;
    }
    a++;
}


for(i=0; i<num; i++)
{
    for(j=0; j<dim; j++)
    {
        printf("%e ",w[i][j]);
    }
    printf("\n");
}

return 0;

}

当我测试这个程序时,它确实正确输入了交换功能,但打印结果与输入相同(因此没有交换)。任何人都可以帮助我,为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

交换功能看起来像

void swap( double **p, double **q )
{
    double *tmp = *p;
    *p = *q;
    *q = tmp;
}

对于用于排序数组的代码,它是无效的,没有意义。至少未声明变量argument1argument2