在函数中交换两个数组的指针

我正在编写一个没有复制部分的mergesort到一个额外的临时数组。 出于这个原因,我创建了一个辅助arraysaux

 int * aux aux = (int *) calloc(n, sizeof(int)); 

其中n是数组的大小。 在函数合并中,我想通过使用指针继续我的算法来在最后交换两个数组。 但是,如果我交换指针,并将它们打印到控制台,我得到了奇怪的东西:

在方法本身内,指针被交换。 但是,如果我检查我的方法,回到我的主,指针不再交换。 调用我的合并方法:

 merge(a, lo, mid, hi, aux); 

其中a是我的主arrays,辅助和lomidhi是整数。

原型:

 void merge(int *a, int lo, int mid, int hi, int *aux); 

我试图像这样交换它们:

 int temp; temp = a; a = aux; aux = temp; 

你能帮我解决这个问题吗?

提前致谢!

发生错误是因为指针是按值传递的。

将它们更改为指针指针:

 void merge(int **a, int lo, int mid, int hi, int **aux); 

像这样交换:

 int *temp; temp = *a; *a = *aux; *aux = temp; 

然后应该像这样调用merge

 merge(&a, lo, mid, hi, &aux); 

我可以发现你的方法有两个不同的问题:

1)为什么使用int临时变量来交换int *指针? 如果sizeof(int)!= sizeof(int *),例如64位系统,这可能会导致问题。 为什么不使用int *临时?

2)你的指针在:

 void merge(int *a, int lo, int mid, int hi, int *aux); 

是按值传递的,这意味着您对函数中指针值的任何更改都不会在其外部可见。 您应该使用以下方法之一:

 void merge(int **a, int lo, int mid, int hi, int *aux); 

要么:

 void merge(int *& a, int lo, int mid, int hi, int *aux); 

如果你在c ++世界。

另一件事:将aux传递给merge函数可能有点多余,因为你可以很好地在内部分配和释放它。