2017-08-16 51 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 –