提问者:小点点

关于C++函数中指针赋值的一个简单问题


这是我的代码,在函数中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++的东西


共2个答案

匿名用户

我不确定您要做什么,但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没有影响。 您的代码是完全相同的,但由于某些原因,因为涉及到指针,初学者通常认为它的工作方式不同。 它不是。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|函数|中|指针|赋值|简单)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?