#include <stdio.h>
void swap1(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
void swap2(int *a, int *b)
{
int *temp = a;
a = b;
b = temp;
}
void swap3(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
main()
{
int a = 9, b = 4;
printf("%d , %d\n", a, b);
swap1(a, b);
printf("%d , %d\n", a, b);
swap2(&a, &b);
printf("%d , %d\n", a, b);
swap3(&a, &b);
printf("%d , %d\n", a, b);
}
最佳答案
C 具有函数参数的值语义。这意味着所有三个交换变体的 a
和 b
都是各自函数的局部变量。它们是您作为参数传递的值的副本。换句话说:
swap1
交换两个局部整型变量的值 - 在函数外部没有可见的效果swap2
交换两个局部变量的值,在本例中是指针, - 相同,没有可见的效果swap3
最终得到了正确的结果,并交换了本地指针变量指向的值。
关于c - 为什么这些交换函数的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4330929/