我正在尝试交换对象以解决使用void指针交换对象的作业问题.我的功能声明必须是:
void swap(void *a, void *b, size_t size);
Run Code Online (Sandbox Code Playgroud)
我不是在寻找确切的代码如何做到这一点我可以自己解决,但我不确定我是否理解正确.我发现有一个问题是:
void *temp;
temp = a;
a = b;
b = temp;
Run Code Online (Sandbox Code Playgroud)
只更改指针指向的内容.那是对的吗?如果它是正确的,为什么交换指针实际上不会改变*a和*b之间的内容.因为如果你的指针指向不同的东西,你不能取消引用它,现在对象会有所不同吗?
同样,只需切换如下值:
void *temp;
*temp = *a;
*a = *b;
*b = *temp;
Run Code Online (Sandbox Code Playgroud)
也不正确,我不知道为什么.因为在我看来,内容是切换的.
交换对象是否意味着完全交换内存和指针指向的值?
因此我似乎必须使用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???
Run Code Online (Sandbox Code Playgroud)
谢谢!