2014-06-22 258 views
-3

这里我试图做一个函数,它可以交换两个值而不用第三个变量。除了下面说明的其他实现之外,还有哪些其他实现可以实现?使用指针:指针指针指针

void swap(int* x, int* y) 
{ 
    (*x)=(*x)+(*y); 
    (*y)=(*x)-(*y); 
    (*x)=(*x)-(*y); 

} 
+0

您需要的XOR交换算法。请在wiki上查找 – ALM865

+3

您的错误信息与此代码无关。 –

+0

@OliCharlesworth应用程序有什么问题?为什么上面的代码无效? – Priyanka

回答

3

看起来你正在试图做XORswap trick

#include <stdio.h> 

void swap(int* x, int* y) 
{ 
    *x^=*y; 
    *y^=*x; 
    *x^=*y; 
} 
int main(){ 
    int x = 1; 
    int y = 2; 
    swap(&x, &y); 
    printf("x = %d, y =%d\n", x, y); 
} 
+0

不错的例子!简单而简洁 – ALM865

+2

注意:请不要在代码中这样做。 – chris

+0

如果您使用'unsigned int',则可以在代码中执行。 –

0

它实际上应该工作...

我用下面的代码与功能:

void swap(int* x, int* y) 
{ 
    (*x)=(*x)+(*y); 
    (*y)=(*x)-(*y); 
    (*x)=(*x)-(*y); 
} 

int a1=1; 
int a2=2; 

main() 
{ 
    swap(&a1,&a2); 

    printf("a1= %d\na2= %d \n",a1 ,a2); 
} 
+0

我曾尝试过使用相同的代码,但当时并不能正常工作,但现在它可以正常工作。可能是一些翻译等问题。 @Oli Charlesworth抱歉给您带来不便。 – Priyanka