昆仑万维C++工程师笔试

来源:互联网 发布:监控qq软件 重装系统 编辑:程序博客网 时间:2024/04/26 14:16

1.今天做笔试题的时候,想当然的认为类的成员函数是占4字节的指针,刚才试了下发现完全错了。抓狂

#include <stdio.h>class Data{public:Data();~Data();char a;short b;int c;};void main(){printf("%d",sizeof(Data));getchar();}
关于字节对齐问题相比都不用多说了,今天题目中明确说明了四字节对齐。

成员函数是不占内存(严格说他存在代码区)的,所以计算类的大小就是成员变量的大小。当你这个类是多态类的时候(任意一成员函数为虚函数)类就多了一个隐藏的成员变量,虚函数指针。

最后输出为8

class Data{public:Data();~Data();virtual int calc();virtual int month();virtual int day() = 0;char a;short b;int c;};
变为上面时,输出就为12,注意只有一个虚函数指针。

2.

void calc(){int *p1,*p2,value;p1 = (int*)0x500;p2 = (int*)0x518;value = p2 - p1;printf("%d",value);}
做题时候想的太单纯了,其实很简单,记录下吧。输出为6。