一道微软2013实习生招聘题(c++,特别容易出错)
下面的这个程序输出结果是什么?
- #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 _tmain(int argc, _TCHAR *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;
- }
分析: 第一个for循环第一次的时候,使得data[0].a=1,data[0].b=1,data[0].a=2,这个时候data[0].a=2,data[0].b=1,进入for第二次循环,使得data[1].a=1,data[1].b=1,data[1].a=2,这个时候data[1].b影响的是data[0].b,所以此时data[1].a=1,data[1].b=1,之前的data[0].b=2,类似分析.(注意:类A占用4个字节,类B占用8个字节).
结果输出:22221111