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

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

我有我的职责,我正在填补targetBubble在那里,但它不是在调用这个函数之后填充的,但是我知道它是在这个函数中填充的,因为我有输出代码。

bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
    targetBubble = bubbles[i];}

我像这样传递指针

Bubble * targetBubble = NULL;clickOnBubble(mousePos, bubbles, targetBubble);

为什么它不起作用?谢谢


慕码人8056858
浏览 336回答 3
3回答

小唯快跑啊

因为您正在传递指针的副本。要更改指针,需要如下所示:void&nbsp;foo(int&nbsp;**ptr)&nbsp;//pointer&nbsp;to&nbsp;pointer{ &nbsp;&nbsp;&nbsp;&nbsp;*ptr&nbsp;=&nbsp;new&nbsp;int[10];&nbsp;//just&nbsp;for&nbsp;example,&nbsp;use&nbsp;RAII&nbsp;in&nbsp;a&nbsp;real&nbsp;world}或void&nbsp;bar(int&nbsp;*&&nbsp;ptr)&nbsp;//reference&nbsp;to&nbsp;pointer&nbsp;(a&nbsp;bit&nbsp;confusing&nbsp;look){ &nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;=&nbsp;new&nbsp;int[10];}

郎朗坤

您正在按值传递指针。传球对指针的引用如果你想更新的话。bool&nbsp;clickOnBubble(sf::Vector2i&&nbsp;mousePos,&nbsp;std::vector<Bubble&nbsp;*>&nbsp;bubbles,&nbsp;Bubble&nbsp;*&&nbsp;t)

慕桂英546537

如果你写int&nbsp;b&nbsp;=&nbsp;0;foo(b);int&nbsp;foo(int&nbsp;a){ &nbsp;&nbsp;a&nbsp;=&nbsp;1;}您不会更改“b”,因为a是b的副本。如果您想要更改b,则需要传递b的地址。int&nbsp;b&nbsp;=&nbsp;0;foo(&b);int&nbsp;foo(int&nbsp;*a){ &nbsp;&nbsp;*a&nbsp;=&nbsp;1;}指针也是如此:int*&nbsp;b&nbsp;=&nbsp;0;foo(b);int&nbsp;foo(int*&nbsp;a){ &nbsp;&nbsp;a&nbsp;=&nbsp;malloc(10);&nbsp;&nbsp;//&nbsp;here&nbsp;you&nbsp;are&nbsp;just&nbsp;changing&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;what&nbsp;the&nbsp;copy&nbsp;of&nbsp;b&nbsp;is&nbsp;pointing&nbsp;to,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;not&nbsp;what&nbsp;b&nbsp;is&nbsp;pointing&nbsp;to}因此,要更改b点的位置以传递地址:int*&nbsp;b&nbsp;=&nbsp;0;foo(&b);int&nbsp;foo(int**&nbsp;a){ &nbsp;&nbsp;*a&nbsp;=&nbsp;1;&nbsp;&nbsp;//&nbsp;here&nbsp;you&nbsp;changing&nbsp;what&nbsp;b&nbsp;is&nbsp;pointing&nbsp;to}HTH
打开App,查看更多内容
随时随地看视频慕课网APP