我正在尝试交换对象,这是一个使用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
参数以及它对算法的影响。 - Carl Norum