对于作业,我需要为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;
}
当我测试这个程序时,它确实正确输入了交换功能,但打印结果与输入相同(因此没有交换)。任何人都可以帮助我,为什么这不起作用?
答案 0 :(得分:1)
交换功能看起来像
void swap( double **p, double **q )
{
double *tmp = *p;
*p = *q;
*q = tmp;
}
对于用于排序数组的代码,它是无效的,没有意义。至少未声明变量argument1
和argument2
。