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

标签 c arrays function pointers swap

<分区>

我正在将一个没有复制部分的合并排序写入一个额外的临时数组。为此,我创建了一个辅助数组 aux

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

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

在方法本身内,指针被交换。但是如果我在我的方法之后检查,回到我的 main 中,指针就不会再交换了。 我的合并方法的调用:

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

a 是我的主数组,aux 是辅助数组,lomidhi 是整数。

原型(prototype):

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);

关于c - 在函数中交换两个数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23909134/

相关文章:

Linux共享库实现的困惑

c - 只获取c/Ubuntu中某个目录下的文件

c++ - 在堆上初始化 vector 数组,C++

c - 如何用C语言创建特定整数的 block

c++ - 所有数的最大公约数之和,直到 n 与 n

javascript - 如何使用函数来确定 Javascript 数组中是否存在值?

Javascript If 语句验证三个不同的表单值?

c - 哪个文件应包含我的 c 项目中的库?

c - Fortran 和 C 数组存储的区别?

javascript - 如何等待异步函数完成