2010-12-12 8 views
4

私は最終試験でこれを見つけた:誰かが私の理解を助けることができますか? int型*&PR

int a = 564; 
int* pa = &a; 
int *& pr = pa; 
cout << *pr; 

複数の選択肢の答えによると、コードが有効であり、の値を表示します。

しかし、私は3行目の評価と優先順位について混乱しています。*および&の順序は同じです。だから、それはint *(&pr)でしょうか?どのように言葉で記述することができますか?

ありがとうございます。

答えて

3

これはポインタへの参照です。 Cでは、これをポインタへのポインタとして表現します。

// C++ style 
void update_my_ptr(int*& ptr) { ptr = new int[1024]; } 

// C style 
void update_my_ptr_c(int **ptr) { *ptr = malloc(1024 * sizeof(int)); } 

int main() 
{ 
    int *ptr; 
    update_my_ptr(ptr); 
    // Here ptr is allocated! 

} 
+0

興味深い。私はCでポインタへのポインタを使用しています。したがって、この類推は構文を理解するのに非常に便利です。ありがとうございました! – MercurialMadnessMan

5

3行目は、ポインタ参照(または、必要に応じてポインタへの参照)を定義します。ポインタに代入するとprは実際にpaへのエイリアスになり、評価するとpaが指し示す場所、つまりaが指し示されます。優先順位はここに意味がありませんので、

変数の宣言で

*&は、オペレータの意味を持ちません。

+0

ありがとう:

あなたはこのような何かを書くことができます!これは役に立ちました。 – MercurialMadnessMan

1

3行目は、intへのポインタの参照(読み取り:エイリアス)を作成します。 prを0に設定する場合は、paも0になります(逆も同様です)。

関連する問題