class A{public: A() {}; ~A() {}; virtual void SetTest(){ printf("a/n");}; int m_iFirst;};class B :public A{public: B() {}; ~B() {}; virtual void SetTest(){ printf("b/n");}; int m_iSecond;};void WanMeiTest(A* a, int iCount){ void * p = a + 1; for(int i = 0; i < iCount; i++) { (a+i)->SetTest(); }}在调用的时候如果转入的是 A a; B b; int c = sizeof(a); c = sizeof(b); A aBase[2]; B* aChild = new B[5]; B* pp = aChild + 1; WanMeiTest(aChild, 5);结果会崩溃,原因在于WanMeiTest里面的内存偏移是按照A的大小来的,除非里面强转成B类型的指针