我想交换两个参数的值。但是我没能通过在函数中交换它们的地址来实现它。起初,我认为地址可以在功能上改变。但是在调试之后,我发现尽管函数中的地址已经改变,但它在主函数中并没有改变。为什么指针的地址在函数中的作用与参数的值相同?这样做,只更改副本吗?
include<stdio.h>
void swap(int *, int *);
int main()
{
int a = 5 , b = 10;
swap(&a, &b);
printf("%d", a);
printf("\n%p", &a);
return 0;
}
void swap(int *a, int *b)
{
int *temp ;
temp = a;
a = b;
b = temp;
}
现在我已经学会了解决它的方法之一。但是谁可以告诉我如何通过二级指针解决它。
#include<stdio.h>
void swap();
int main()
{
int a = 5 , b = 10;
swap(&a, &b);
printf("%d", a);
printf("\n%p", &a);
return 0;
}
void swap(int *a, int *b)
{
int temp ;
temp = *a;
*a = *b;
*b = temp;
}
答案 0 :(得分:3)
在第一个代码段交换中不会发生,因为您正在交换自动本地指针,一旦函数调用返回该指针将不再存在。 swap
函数中不会看到main
函数中对本地指针的修改。