2011-12-25 5 views
4

私はC++で構造体オブジェクトへのポインタを持っています。ポインタが関数内でどこを指しているかを編集

node *d=head; 

私はそのポインタを参照によって関数に渡し、そのポインタが指す場所を編集したいと考えています。私はそれを渡すことができますが、最初のポインタが指しているところでは変更されず、関数内のローカルポインタだけが変更されます。関数の引数はポインタでなければなりません。その後、同じ構造体の別のオブジェクトに表示するように変更しますか?

+0

をあなたが別の関数に 'D 'を通過したいあなたのコード – JAM

+0

を投稿しますが、'持ちください他の関数が(参照を介して) 'd'を変更したときに' head'の変更?発信者はあなたに「頭」をどのように渡しましたか? – Mat

答えて

9

あなたは2つの基本的な選択肢があります:のポインタを渡すか、の参照を渡します。あなただけのnode *dとしてポインタを渡す場合にのみ変更する関数内dを修正し、その後、

void modify_pointer(node *&p) { 
    p = new_value; 
} 

modify_pointer(d); 

:参照による

void modify_pointer(node **p) { 
    *p = new_value; 
} 

modify_pointer(&d); 

パッシングが&使用しています:ポインタ渡しは、ポインタへのポインタを使用する必要がありますあなたが観察したようにローカルコピー。

1

あなたの関数の引数としてnode **を渡します

// f1 : 
node *d = head; 

f2(&d); 

// f2: 
void f2(node **victim) { 
    //assign to "*victim" 
} 
3

は、参照することにより、それを渡します

void foo(node*& headptr) 
{ 
    // change it 
    headptr = new node("bla"); 
    // beware of memory leaks :) 
} 
関連する問題