#include <iostream>
class A{
public:
long a;
};
class B : public A
{
public:
long b;
};
void seta(A* data, int idx)
{
data[idx].a = 2;
}
int main(int argc, char *argv[])
{
B data[4];
for(int i=0; i<4; ++i)
{
data[i].a = 1;
data[i].b = 1;
seta(data, i);
}
for(int i=0; i<4; ++i)
{
std::cout<<data[i].a<<data[i].b;
}
return 0;
}
Which is the right answer?
A. 11111111
B. 12121212
C. 11112222
D. 21212121
E 22221111
B data[4];连开64个字节空间 传进函数后强转成A*也就是加法操作每次移动的是sizeof(A)也就是8个字节 而B本身是16个字节 就相当于四次把前两个B的32个字节的值全都赋成了2 于是22221111