您的位置:首页 > 编程语言 > C语言/C++

一道微软2013实习生招聘题(c++,特别容易出错)

2013-04-07 00:15 330 查看
一道微软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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: