C++经典面试题
小也有个约束条 件,分下面两种情况:如果n大于所有成员变量类型所占用的字节数,那么结构的总大小必须为占用空间最大的变量占用的空间数的倍数;
否则必须为n的倍数。下面举例说明其用法。
#pragma pack(pop)//恢复对齐状态 以上结构的大小为16,下面分析其存储情况,首先为m1分配空间,其偏移量为0,满足我们自己设定的对齐方式(4字节对齐),m1占用1个字节。接着开始为 m4分配空间,这时其偏移量为1,需要补足3个字节,这样使偏移量满足为n=4的倍数(因为sizeof(double)大于n),m4占用8个字节。接 着为m3分配空间,这时其偏移量为12,满足为4的倍数,m3占用4个字节。这时已经为所有成员变量分配了空间,共分配了16个字节,满足为n的倍数。如 果把上面的#pragma pack(4)改为#pragma pack(16),那么我们可以得到结构的大小为24。(请读者自己分析) 2、 sizeof用法总结 在VC中,sizeof有着许多的用法,而且很容易引起一些错误。下面根据sizeof后面的参数对sizeof的用法做个总结。 A. 参数为数据类型或者为一般变量。例如sizeof(int),sizeof(long)等等。这种情况要注意的是不同系统系统或者不同编译器得到的结果可能是不同的。例如int类型在16位系统中占2个字节,在32位系统中占4个字节。 B. 参数为数组或指针。下面举例说明. int a[50]; //sizeof(a)=4*50=200; 求数组所占的空间大小 int *a=new int[50];// sizeof(a)=4; a为一个指针,sizeof(a)是求指针 //的大小,在32位系统中,当然是占4个字节。 C. 参数为结构或类。Sizeof应用在类和结构的处理情况是相同的。但有两点需要注意,第一、结构或者类中的静态成员不对结构或者类的大小产生影响,因为静态变量的存储位置与结构或者类的实例地址无关。 第二、没有成员变量的结构或类的大小为1,因为必须保证结构或类的每一 个实例在内存中都有唯一的地址。 下面举例说明, Class Test{int a;static double c};//sizeof(Test)=4. Test *s;//sizeof(s)=4,s为一个指针。 Class test1{ };//sizeof(test1)=1; D. 参数为其他。下面举例说明。 int func(char s[5]); { cout<<sizeof(s); 这里将输出4,本来s为一个数组,但由于做为函数的参数在传递的时候系统处理为一个指针,所以sizeof(s)实际上为求指针的大小。 return 1; } sizeof(func("1234"))=4 因为func的返回类型为int,所以相当于求sizeof(int). 以上为sizeof的基本用法,在实际的使用中要注意分析VC的分配变量的分配策略,这样的话可以避免一些错误。 -------------------------------------------------------------------------- 25.i最后等于多少?
答: i = 5 -------------------------------------------------------------------------- 26.
答: 4 -------------------------------------------------------------------------- 27. class A
B, A中的func1和B中的func2都不是虚函数. C, A中的func2是虚函数.,B中的func1不是虚函数. D, A中的func2不是虚函数,B中的func1是虚函数. 答: A ---------------------------------------------------- |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |