我有两个整数变量 i 和 j,我想创建一个函数,将这两个变量作为参数并使用 xor 运算符交换它们的内容。现在,如果我使函数按值获取参数,即 void swap (int x , int y);
(函数体与下面的函数 swap
相同),那么值在函数内很好地交换。但是我想要的是在调用函数中交换变量的值,我使用通过引用(以及通过指针)传递参数:
void swap ( int& x , int& y )
{
x^=y^=x^=y;
cout << x<< " " << y << endl ;
}
int main ()
{
int i (1), j (2) ;
swap ( i, j ) ;
cout << i << " " << j << endl ;
}
但两种情况都没有显示正确的结果!
为什么 swap
函数在通过引用或指针传递参数时不交换值?
I have two integer variables i and j and I want to make a function which takes these two variables as its argument and interchanges their contents using xor operator.
为什么?
如您所知,您需要将指针传递给对象,或者使用引用。
这个:
x^=y^=x^=y;
具有未定义的行为,因为它在序列点之间修改同一个对象两次(它对 x
和 y
都这样做)。
如果两个对象是同一个对象,异或技巧就会失败;第一个异或将对象归零。
如果你想交换两个对象,只需使用一个临时对象:
int temp = x;
x = y;
y = temp;
它很简单,而且有效。
我是一名优秀的程序员,十分优秀!