void f(int *b) {
b = new int;
*b = 2;
}
int main() {
int *a = NULL;
f(a);
if (a == NULL) {
std::cout << "mde";
}
return 0;
}
你能解释一下为什么在这段代码中变量a仍然存在NULL吗?毕竟,指针是指向内存区域的地址。最初,它不指向任何地方。然后我将地址转移到这个内存区域,我已经在那里写了一些东西并且它没有改变。请解释为什么?
void f(int *b) {
b = new int;
*b = 2;
}
int main() {
int *a = NULL;
f(a);
if (a == NULL) {
std::cout << "mde";
}
return 0;
}
你能解释一下为什么在这段代码中变量a仍然存在NULL吗?毕竟,指针是指向内存区域的地址。最初,它不指向任何地方。然后我将地址转移到这个内存区域,我已经在那里写了一些东西并且它没有改变。请解释为什么?
按值将参数传递给函数会创建.
因此,您使用副本 的事实不会以任何方式影响
a价值。a您需要(因为它是 C++)使用对指针的引用:
然后工作的结果将保存在
a.或者将指针传递给指针:
因为您是按值传递指针,而不是按引用传递。也就是说,函数 fb 内部是指针 a 的副本。您写下新地址 a 的事实不会以任何方式影响它。
如果您需要专门修改一个,请执行此操作(带有链接的版本):
或像这样(带指针的选项):
在第二种情况下,必须更改对 f 的调用:不是 f(a);和 f(&a);