2012-01-20 3 views
0

の作業が、私の参照が失われた機能パスがメニューの状態を変更する機能を実装しようとして

void gotoLowerlevel(Menu *item) 
{ 
    if (item->chld != 0x00){ 
     item = item->chld; 
     } 
} 

に入っているときに、関数の呼び出しは currentStateのはへのポインタである。この方法で行われていません構造体メニュー

なぜこれが機能しないのかわかりません。何か案は..??

答えて

3

は、他の場所のオブジェクトへの参照であってもローカル変数です。 cnsle->currentStateを参考にcnsle

  • パスで

    • パス(つまり&cnsle->currentStateMenu ** itemptrにメソッドシグネチャと呼び出しパラメータを変更する場合)
    • か、新しい値を返す:あなたはどちらかに必要cnsle->currentStateを変更するにはgotoLowerLevelから、それを割り当てる:cnsle->currentState = gotoLowerLevel(cnsle->currentState)

    呼び出しコードを読むとき、これは、それは明らかにして私の好みは、最後のオプションになりますは変更されることがあります。

    他にも参照を渡す方法が説明されています。私の推奨ソリューションコードは

    Menu* gotoLowerlevel(Menu *item) 
    { 
        if (item->chld != 0x00) { 
         item = item->chld; 
        } 
        return item; 
    } 
    
    /* .... */ 
    cnsle->currentState = gotoLowerlevel(cnsle->currentState); 
    
  • +0

    NULLをチェックすることもできます –

    2

    ポインタを値渡ししています。

    ポインタが指しているオブジェクトに対する操作は外側から見えますが、ポインタ自体はコピーのみです。

    ポインタへのポインタを使用すると便利です。

    関連する問題