可能重复:
使用指针交换对象
我知道如何使用指针进行交换,但是,如果我尝试这样的不同方法:
/* 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>.
| 归档时间: |
|
| 查看次数: |
2867 次 |
| 最近记录: |