为什么这个代码不交换数字

  • 本文关键字:交换 数字 代码 c
  • 更新时间 :
  • 英文 :


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

看看下面的代码,旨在交换两个数字,但它没有。请帮我理解为什么没有。我是编程新手,所以如果你能比平时多解释一下,我将不胜感激。非常感谢。

#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 %dn", 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);

在CCD_ 2中。

这是因为通过副本而不是指针传递变量。换句话说,您的swap()函数接收自己的xy的私有副本并交换它们,并且调用方看不到交换的结果。正确的代码可能看起来像这样:

#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 %dn", x, y);
return 0;
}
//function definition of swap
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}

最新更新