2017-08-16 15 views
-5
struct Test1 { 
    struct Test2 { 
     DWORD VA1 = 0; 
     DWORD VA2 = 0; 
     Test2(DWORD hp):VA1(hp) { } 
    } *Ppy[5]; 

    Test1() { 
     for (int i = 0; i < 5; i++) 
     *(Ppy + i) = new Test2((DWORD)i+2); 
    } 

    ~Test1() { 
     for (int i = 0; i < 5; i++) 
     delete *(Ppy + i); 
    } 
}; 

void main() { 
    Test1*Als = new Test1; 
    for (int i = 0; i < 5; i++) 
     Als->Ppy[i]->VA2; 
     // doesn't work-> cout << Als->*(Ppy + i)->VA2 << endl; 

    delete Als; 
} 

こんにちはコールポインタ演算を経由して構造体の構造体の属性

  1. ポインタースタイル/算術に、この行全体(可能な場合)または少なくともPpy[i]を変換する方法:Als->Ppy[i]->VA2

    このような何かが動作しません:Als->*(Ppy + i)->VA2

  2. これはさらに多くの方法を作る方法はありますかレックス(asmではない)?

+2

ポインタや配列 'p'とインデックス' i'は 'p [i]'と '*(p + i)'の式が等しいことが分かります。なぜあなたはポインタ計算を読むのが難しいのですか?あなたが怠け者であれば、書く人数も増えます。 –

+2

これを行う理由を説明してください。 (適切にフォーマットするためにコードを編集してください) –

+0

'Ppy [i]' **は**ポインタ演算です – user463035818

答えて

0

の代わりに:あなたが書くことができ

Als->Ppy[i]->VA2; 

(*(Als->Ppy + i))->VA2; 
  • 配列へのポインタである配列の要素へAls->Ppy
  • ポインタであるAls->Ppy + i
  • 配列の要素の値は、配列の要素の*(Als->Ppy + i)

値はポインタそのものである、あなたはの要素を指すようにそれを使用する前に、括弧内の上記式をラップする必要があります構造。

+0

は動作しません ' - > VA2'のT_T leftはclass/struct/unionを指さなければなりません/ジェネリックタイプ|式にはポインタ型クラス –

+0

が必要です。 '(*(Als-> Ppy + i)) - > VA2;でなければならないと思いますが、cpp.shはそれを好きではありません。それを打ち砕く。 –

+0

@VTT: '*(Als-> Ppy + i)'は配列item - *への参照ですが、その配列項目はポインタ*であることが間違いありません。 (これはポインタの配列です)。http://cpp.sh/9npzlを参照してください。 –