【发布时间】:2021-04-29 19:01:20
【问题描述】:
我是 C 编程的新手,我不明白为什么在使用函数时交换两个变量的值不应该与不使用指针的正常方式相同。
#include <stdio.h>
void swap(int*, int*); //Swap function declaration
int main()
{
int x, y;
printf("Enter the value of x and y\n");
scanf("%d%d",&x,&y);
printf("Before Swapping\nx = %d\ny = %d\n", x, y);
swap(&x, &y);
printf("After Swapping\nx = %d\ny = %d\n", x, y);
return 0;
}
//Swap function definition
void swap(int *a, int *b)
{
int t;
t = *b;
*b = *a;
*a = t;
}
为什么不应该这样:
t = b;
b = a;
a = t;
【问题讨论】:
-
因为这只是交换本地指针,而不是它们指向的内存中的数据。
-
@Barmar 那么你的意思是那些交换的变量只能在函数内访问,而不是在全局范围内?
-
没错,但不是重点。交换指针不会交换它们指向的变量的内容。
-
打个比方:假设你的左手有一个蓝色的盒子,右手有一个红色的盒子,你想交换它们的内容。交换他们的手不会那样做。手就像指针。
-
因为有了指针,你总是要记住指针和它指向的东西之间的区别。
b = a复制指针。 (但这不是你想要的。)*b = *a复制指向的值:这就是你想要的。
标签: c pass-by-reference swap pass-by-value function-declaration