在函数中按地址交换两个参数时出错

时间:2017-03-03 10:48:04

标签: c function-pointers

我想交换两个参数的值。但是我没能通过在函数中交换它们的地址来实现它。起初,我认为地址可以在功能上改变。但是在调试之后,我发现尽管函数中的地址已经改变,但它在主函数中并没有改变。为什么指针的地址在函数中的作用与参数的值相同?这样做,只更改副本吗?

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

1 个答案:

答案 0 :(得分:3)

在第一个代码段交换中不会发生,因为您正在交换自动本地指针,一旦函数调用返回该指针将不再存在。 swap函数中不会看到main函数中对本地指针的修改。