为了账号安全,请及时绑定邮箱和手机立即绑定

函数不更改传递的指针C+。

函数不更改传递的指针C+。

C++
慕码人8056858 2019-06-25 15:17:45
函数不更改传递的指针C+。我有我的职责,我正在填补targetBubble在那里,但它不是在调用这个函数之后填充的,但是我知道它是在这个函数中填充的,因为我有输出代码。bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {     targetBubble = bubbles[i];}我像这样传递指针Bubble * targetBubble = NULL;clickOnBubble(mousePos, bubbles, targetBubble);为什么它不起作用?谢谢
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

因为您正在传递指针的副本。要更改指针,需要如下所示:

void foo(int **ptr) //pointer to pointer{
    *ptr = new int[10]; //just for example, use RAII in a real world}

void bar(int *& ptr) //reference to pointer (a bit confusing look){
    ptr = new int[10];}


查看完整回答
反对 回复 2019-06-25
?
郎朗坤

TA贡献1921条经验 获得超9个赞

您正在按值传递指针。

传球对指针的引用如果你想更新的话。

bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)


查看完整回答
反对 回复 2019-06-25
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

如果你写

int b = 0;foo(b);int foo(int a){
  a = 1;}

您不会更改“b”,因为a是b的副本。

如果您想要更改b,则需要传递b的地址。

int b = 0;foo(&b);int foo(int *a){
  *a = 1;}

指针也是如此:

int* b = 0;foo(b);int foo(int* a){
  a = malloc(10);  // here you are just changing 
                   // what the copy of b is pointing to, 
                   // not what b is pointing to}

因此,要更改b点的位置以传递地址:

int* b = 0;foo(&b);int foo(int** a){
  *a = 1;  // here you changing what b is pointing to}

HTH


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 335 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信