这是我的代码,在函数中a=b;
之后,a仍然是nullptr.。。。
int getBox(int * a){
int *b = new int;
*b=3;
a=b;
std::cout<<*a;
}
int main(){
int *a= nullptr;
getBox(a);
std::cout<<a;
}
我想这是一个很简单的问题。。。 也许我忘了太多关于C++的东西
我不确定您要做什么,但getBox()
中的此行:
a=&b;
实际上并不改变a
,主要是重写指针(函数创建的副本),并使其指向其他地方。
你可以这样做(同样,我看不出有什么意义):
int getBox(int ** a){
int *b = new int;
*b=3;
*a=b;
std::cout<<*a;
}
int main(){
int *a= nullptr;
getBox(&a);
std::cout<<a;
}
是的。当然,为什么更改getbox
中的a
要更改main中的a
的值呢? 如果你认为答案是‘因为它是一个指针’,那么恐怕你误解了指针。
看这段代码
int getBox(int a){
a=3;
std::cout<<a;
}
int main(){
int a= 0;
getBox(a);
std::cout<<a;
}
在getbox
中设置a=3
对Main中的a
没有影响。 您的代码是完全相同的,但由于某些原因,因为涉及到指针,初学者通常认为它的工作方式不同。 它不是。