我已经很多年没有用 C++ 编程了,所以我决定用指针来刷新我的记忆。
在两个数字之间交换的经典示例中,示例是
void swapPointersClassic(double *num1, double *num2)
{
double temp;
temp = *num1;
*num1 = *num2;
*num2 = temp;
}
这允许我们像调用函数一样进行函数调用swapPointersClassic(&foo, &bar);
,因为我们传入了变量 foo 和 bar 的内存地址,函数将检索值并进行交换。但是我开始怀疑,为什么我不能执行以下操作?
void swapPointers(double *num1, double *num2)
{
double *temp;
temp = num1;
num1 = num2;
num2 = temp;
}
这对我来说似乎更有意义,因为我们只需要创建足够的临时存储空间来存储内存地址 num1(而不是完整的临时存储空间来存储双精度值 *num1)。但是,函数范围似乎限制了指针交换的效果。拨打电话后swapPointers(&foo, &bar);
,我可以看到在函数 swapPointers 中,foo & bar 确实被交换了。一旦我们退出 swapPointers 函数, foo 和 bar 就不再交换了。谁能帮我理解为什么会这样?这种行为让我想起了典型的按值传递方法,但我们在这里通过指针传递。所以这意味着我们只能触摸那些指针指向的值,而不能触摸指针本身?