看看下面的代码,旨在交换两个数字,但事实并非如此。请帮助我理解它没有的原因。我是编程新手,所以如果你比平时更多地解释这些事情,我将不胜感激。 谢谢!
#include <stdio.h>
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;
}
答案 0 :(得分:8)
C是按值传递,因此swap
函数接收值的副本,并且不会影响调用者中的变量。
要影响调用者中的变量,需要将指针传递给它们。
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
并将其命名为
swap(&x, &y);
main
中的。
答案 1 :(得分:3)
这是因为您通过复制而不是通过指针传递变量。换句话说,您的swap()
函数会收到自己的x
和y
的私有副本并交换它们,并且调用者无法看到交换结果。正确的代码可能如下所示:
#include <stdio.h>
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;
}