交换两个变量的函数
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 不行。为什么?感谢您的回答。 :)
很简单,因为,您已经通过了 a
和 b
,并使用了 x
和 y
(以防万一,此处未定义) .
重要的是,对于定义为 int *p;
且未分配内存的指针,使用
*p=*x;
即取消引用指针调用 undefined behaviour。
正如 中正确提到的,您可以使用一个简单的 int
变量,不需要指针。
在函数 1 中,您使用的指针 p
未指向有效地址。此处不需要指针:
void swap(int *x, int *y)
{
int p;
p=*x;*x=*y;*y=p;
}
我是新手,正在学习教鞭。我遇到这个问题:
函数 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 不行。为什么?感谢您的回答。 :)
很简单,因为,您已经通过了 a
和 b
,并使用了 x
和 y
(以防万一,此处未定义) .
重要的是,对于定义为 int *p;
且未分配内存的指针,使用
*p=*x;
即取消引用指针调用 undefined behaviour。
正如 int
变量,不需要指针。
在函数 1 中,您使用的指针 p
未指向有效地址。此处不需要指针:
void swap(int *x, int *y)
{
int p;
p=*x;*x=*y;*y=p;
}