亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數不更改傳遞的指針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 關注
  • 366 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號