【问题标题】:Error swapping two arguments by address in function [duplicate]在函数中按地址交换两个参数时出错[重复]
【发布时间】:2017-03-03 10:48:04
【问题描述】:

我想交换两个参数的值。但是我没有通过在函数中交换它们的地址来实现它。起初,我认为地址可以在功能上改变。但是调试后发现,虽然在函数里改了地址,但是在main函数里并没有变。为什么指针的地址在函数中的作用与参数的值一样?是否只更改副本?

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

【问题讨论】:

  • int a = 5 , b = 10;只有 1 个深度。无法获得 &((..)&a)
  • 在您的第二个块中,您显示了整数的正确交换函数。你喜欢在哪里有第二名的指针?
  • 好的!我找到了我想要的答案。

标签: c function-pointers


【解决方案1】:

在第一次 sn-p 交换将不会发生,因为您正在交换一旦函数调用返回将不再存在的自动本地指针。对swap 函数中本地指针的这种修改不会在main 函数中看到。

【讨论】:

  • 谢谢!我已经在其他问题中找到了具体答案。但我也感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多