【发布时间】:2011-01-15 00:26:48
【问题描述】:
我正在尝试为使用 void 指针交换对象的作业问题交换对象。我的函数的声明必须是:
void swap(void *a, void *b, size_t size);
我不是在寻找确切的代码如何做到这一点,所以我可以自己弄清楚,但我不确定我是否理解正确。我发现一个问题是:
void *temp;
temp = a;
a = b;
b = temp;
仅更改指针指向的内容。那是对的吗?如果它是正确的,为什么交换指针实际上不会改变 *a 和 *b 之间的内容。因为如果你的指针指向不同的东西,你不能取消引用它并且对象现在会不同吗?
同样,只需切换如下值:
void *temp;
*temp = *a;
*a = *b;
*b = *temp;
也不正确,我不知道为什么。因为在我看来,内容又被切换了。
交换对象是否意味着完全交换内存和指针指向的值?
所以看来我必须使用 malloc 为我的交换分配足够的空间。如果我为一个对象分配足够的内存,假设它们的大小相同,我真的看不出它与上面的其他两种方法有何不同。
void *temp = malloc(sizeof(pa));
// check for null pointer
temp = a;
// do something I'm not sure of since I don't quite get how allocating space is any
// different than the two above methods???
谢谢!
【问题讨论】:
-
你已经接近了。但是,不允许使用
void *。想一想您可以移动信息的其他方式,特别是考虑size参数以及它对您的算法有什么影响。 -
更改指针是一个不错的尝试,但由于它们是按值传递的,所以不会起作用。因此,调用者在调用之前将在指针中具有相同的值。