我试图使用指针(特别是一个空指针)按引用编写交换函数,但我的代码不起作用.这是我的代码:
void swap(void *p1,void *p2)
{
int temp;
temp=*((int*)p2);
p2=p1;
p1=&temp;
}
int main()
{
int i=4;
int j=5;
cout<<i<<j<<endl;
swap(&i,&j);
cout<<i<<j<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
代码不起作用,因为您没有取消引用分配指针.它应该是
*((int*)p2)=*((int*)p1);
*((int*)p1)=temp;
Run Code Online (Sandbox Code Playgroud)
请注意,您正在做一个void*指向a的假设int,这显然并非总是如此.从本质上讲,你不妨更换void*用int*,并摆脱了铸件.
API的更一般情况应如下所示:
void swap(void *p1,void *p2, size_t sz)
Run Code Online (Sandbox Code Playgroud)
在内部,API应该分配大小的缓冲区sz,做出memcpy了进去,然后做一个交换,再次使用memcpy.