为什么这段代码不能交换数字?

可能重复:
为什么这些交换函数的行为不同?

看看下面的代码,旨在交换两个数字,但事实并非如此。 请帮助我理解它没有的原因。 我是编程新手,所以如果你比平时更多地解释这些事情,我将不胜感激。 谢谢!

#include  void swap (int a, int b); int main (void) { int x = 1; int y = 2; swap (x, y); printf ("Now x is %d and y is %d\n", x, y); return 0; } //function definition of swap void swap (int a, int b) { int temp = a; int a = b; int b = temp; } 

C是按值传递,因此swap函数接收值的副本,并且不会影响调用者中的变量。

要影响调用者中的变量,需要将指针传递给它们。

 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } 

并称之为

 swap(&x, &y); 

main

这是因为您通过复制而不是通过指针传递变量。 换句话说,你的swap()函数接收它自己的xy的私有副本并交换它们,调用者看不到swap的结果。 正确的代码可能如下所示:

 #include  void swap(int *a, int *b); int main(void) { int x = 1; int y = 2; swap(&x, &y); printf("Now x is %d and y is %d\n", x, y); return 0; } //function definition of swap void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }