#include<stdio.h>
void mystery(int *ptra, int *ptrb)
{
int *temp;
temp = ptrb;
ptrb = ptra;
ptra = temp;
}
int main()
{
int a=2016, b=0, c=4, d=42;
mystery(&a, &b);
if (a < c)
mystery(&c, &a);
mystery(&a, &d);
printf("%d\n", a);
}
我试图通过使用指针来交换变量的值,但我无法理解为什么即使在函数调用之后变量也包含相同的值
答案 0 :(得分:4)
您需要更改指针指向的内容,而不是指针本身。
void mystery(int *ptra, int *ptrb)
{
int temp; //make it non-pointer also.
temp = *ptrb;
*ptrb = *ptra;
*ptra = temp;
}
如果您自己更改指针,则更改将是函数的本地更改,因为变量ptra
和ptrb
是局部变量,保存地址。
一般来说,请记住,当您处理指针时,通常会涉及两个对象:
在你的情况下,你正在处理指针只有,而不是内容 - 而指针本身是通过值传递,这就是为什么改变指针的原因变量是函数的本地变量。
另外,请注意已经std::swap
完成了这项工作。如果你不知道它,请改用它。
答案 1 :(得分:1)
在mystery
函数中,您需要使用的表示法来实际访问指针所指向的值:
*ptra
这称为解除引用指针。我对here有一个旧答案。
所以:
void mystery(int *ptra, int *ptrb)
{
int temp = *ptrb;
*ptrb = *ptra;
*ptra = temp;
}
答案 2 :(得分:0)
您没有交换指针指向的变量的值,而是交换地址。
在指针旁边使用*来使用值而不是地址。