交换两个变量的函数

A function to swap two variables

我是新手,正在学习教鞭。我遇到这个问题:

函数 1:

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

函数 2:

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

我知道函数 2 可以很好地交换两个变量,但函数 1 不行。为什么?感谢您的回答。 :)

很简单,因为,您已经通过了 ab,并使用了 xy(以防万一,此处未定义) .

重要的是,对于定义为 int *p; 且未分配内存的指针,使用

    *p=*x;

即取消引用指针调用 undefined behaviour

正如 中正确提到的,您可以使用一个简单的 int 变量,不需要指针。

在函数 1 中,您使用的指针 p 未指向有效地址。此处不需要指针:

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