通过指针算法调用结构的struct属性

时间:2017-08-16 08:51:07

标签: c++ pointers

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深)?

1 个答案:

答案 0 :(得分:0)

而不是:

    Als->Ppy[i]->VA2;

你可以写:

   (*(Als->Ppy + i))->VA2;
  • 指向数组的指针是Als->Ppy
  • 指向数组元素的指针是Als->Ppy + i
  • 数组元素的值为*(Als->Ppy + i)

数组元素的值本身就是一个指针,在使用它指向结构的元素之前,需要将上面的表达式包装在parens中。