2017-08-16 29 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. 有沒有辦法使這更加comp lex(不是asm深)?

+2

您似乎知道,對於任何指針或數組'p'和索引'i',表達式'p [i]'和'*(p + i)'是相等的。爲什麼你更願意使用(IMO)更難讀指針算術?如果你懶惰的話,也會寫更多的角色。 –

+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必須指向class/struct/union /泛型類型|表達式必須具有指針類型 –

+0

是。應該是'(*(Als-> Ppy + i)) - > VA2;'我想,但cpp.sh也不喜歡那樣。打破它。 –

+0

@VTT:你是正確的* *(Als-> Ppy + i)'是對數組項目的引用 - *但是該數組項是一個指針*。 (這是一個指針數組。)參見http://cpp.sh/9npzl –