-3

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

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

#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;
}
4

2 回答 2

8

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

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

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

并称之为

swap(&x, &y);

main.

于 2012-11-24T16:45:14.023 回答
3

这是因为您通过副本而不是指针传递变量。换句话说,您的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 %d\n", x, y);
    return 0;
}

//function definition of swap
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
于 2012-11-24T16:45:45.957 回答