使用指针交换两个变量

dea*_*mer 1 c++ void-pointers

我试图使用指针(特别是一个空指针)按引用编写交换函数,但我的代码不起作用.这是我的代码:

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)

我哪里错了?

das*_*ght 6

代码不起作用,因为您没有取消引用分配指针.它应该是

*((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.