【发布时间】:2018-03-25 12:52:35
【问题描述】:
对于一个任务,我需要为 n 个向量数组创建一个排序算法。该分配特别告诉我不要交换指针指向的值,而是存储在这些指针中的地址。然后将使用这些指针打印结果。
我的问题是我似乎无法完成指针包含的地址的交换。我已经搜索了相关问题,但它们几乎都改变了指针所指位置的值。
到目前为止,我有这个:
交换功能
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;
}
当我测试这个程序时,它确实正确地进入了交换功能,但打印结果与输入相同(所以没有交换)。谁能帮助我为什么这不起作用?
【问题讨论】:
-
您是否忽略了编译中的警告?这些会很有帮助。我建议在编写自己的小程序时始终使用
-Werror进行编译。 -
这很有帮助。结果我的交换参数发送了一个地址的地址(警告是“来自不兼容的指针类型的赋值”)。我还没到那里,但你帮了我很多。谢谢!
-
太棒了——完全正确。当您开始时,最好立即获得良好的调试实践。如果您仍然卡住,您可以再次发表评论。