交换指针

San*_*996 1 c c++ pointers

可能重复:
使用指针交换对象

我知道如何使用指针进行交换,但是,如果我尝试这样的不同方法:

/* Pointers */
#include <stdio.h>
int main ()
{
  int a=4,b=6;
  swap(&a,&b);
  printf("A is %d, and B is %d\n",a,b);
  return 0;
}

int swap(int *a, int *b)
{
  int *temp;
  temp = a;
  a = b;
  b = temp;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

它不起作用.基本上交换函数正在改变地址,就像'a'现在有地址'b',反之亦然.如果我打印出交换函数中的值,它会给出交换值,但它不反映在main中功能.谁能告诉我为什么?

小智 9

因为

交换函数正在改变地址,就像'a'现在有地址'b',反之亦然

不是真的.它不会改变它们的地址(这绝对没有任何意义).该函数更改指针 - 这些指针是地址的副本,这些指针,因为它们是函数参数,是函数的本地指针.你要做的是:

int swap(int *a, int *b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用引用(仅在C++中),如下所示:

int swap(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并在没有 addressof运算符的情况下调用它:

int a = 4, b = 6;
swap(a, b);
Run Code Online (Sandbox Code Playgroud)

但是,如果这是实际的实现,而不是"写一个交换函数"式的作业,那么你应该使用std::swap() 函数 from <algorithm>.

  • 另外,`std :: swap`. (2认同)