如果我有例如这样的代码:
#include <iostream>
using namespace std;
void swap(void** a) {
int tmp = 5;
void* b = &tmp;
a = &b;
}
int main()
{
int x=11;
void* y=&x;
void** z=&y;
swap(z);
void* a = *z;
cout << *(int*)a << endl;
return 0;
}
上面的代码显示 11,但是我想更新 z 的值(其地址)以指向某个位置,因此我可以打印 5(我的意思是更新它)。我应该怎么做,当我将 z 发送到函数并返回 main 时,我可以收到 5 而不是 11。
我只是对指针不好。
编辑:我必须发送与void**
交换参数
1 回答
您无法通过将
void**
的值(i.e.指向的值)传递给采用void**
的函数来更新它。那只允许修改 pointed-to 内存,而不允许您传递给函数的指针指向哪个地址。要更新其指向的内容,该参数应为
void**&
或void***
。无论您选择哪种解决方案,发布的代码都极易出错,并且难以维护。您应该完全避免它。
另外,请注意,只要退出函数,
&tmp
就会无效,因为局部变量tmp
被销毁。