交换两个变量的函数

时间:2015-05-22 16:53:47

标签: c function pointers swap

我是新手,现在正在学习指针。我遇到了这个问题:

功能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不能。为什么?感谢您的回答。 :)

2 个答案:

答案 0 :(得分:5)

在function1中,您使用的指针p未指向有效地址。你这里不需要指针:

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

答案 1 :(得分:2)

很简单,因为您已通过ab,并使用xy(如果此处未定义)。< / p>

严肃地说,对于定义为int *p;且没有分配内存的指针,使用

    *p=*x;

即,取消引用指针会调用undefined behaviour

正如在Yu Hao's answer中正确提到的,你可以使用一个简单的int变量,不需要指针。