我知道如何使用指针进行交换,但是,如果我尝试这样的不同方法:
/* 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;
}
它不起作用。基本上交换函数正在改变地址,就像'a'现在有地址'b',反之亦然。如果我打印出交换函数中的值,它会给出交换值,但它不反映在main中功能。谁能告诉我为什么?
答案 0 :(得分:9)
由于
交换功能正在改变地址,就像'a'现在有地址'b',反之亦然
不是真的。它不会改变它们的地址(这绝对没有任何意义)。该函数更改指针的值 - 这些指针是地址的副本,而这些指针由于它们是函数参数,因此是函数的本地指针。你要做的是:
int swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
return 0;
}
或者您可以使用引用(仅在C ++中),如下所示:
int swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
return 0;
}
并将其命名为,无地址运营商:
int a = 4, b = 6;
swap(a, b);
但是,如果这是实际实现,而不是“编写交换函数”式作业,那么您应该使用std::swap()
中的<algorithm>
function。
答案 1 :(得分:3)
如果您只是使用标准方法将它们作为输入,您将收到变量的 COPY ,而不是实际变量。但是当你传递*variable
时,你给它一个指向实际变量的变量。然后,您可以使用swap设置内存位置,因为内存位置的副本仍然相同。
请尝试使用此功能代码:
int swap(int *a, int *b)
{
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
return 0;
}
答案 2 :(得分:1)
int swap( int* pa, int *pb )
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
return 0;
}
注意我正在使用更合适的变量名称。此外,您需要分配temp(vs指向temp的指针)。
答案 3 :(得分:0)
您可以尝试使用:
int swap(int*& a, int*& b)
{
int *temp;
temp = a;
a = b;
b = temp;
return 0;
}
请注意,无法移动堆栈地址,因此您需要使用不同的主页:
int main ()
{
int a=4,b=6;
int *A = &a;
int *B = &b;
swap(A, B);
printf("A is %d, and B is %d\n",*A, *B);
return 0;
}