程序员面试宝典-预处理、const、sizeof问题

  • 考察宏定义
#define product(x) (x*x)

int main()
{
int x=3;
cout<
输出结果:

12

题目解析:

宏定义仅为文本替换,即product(x+2)=x+2*x+2=12


  • 考察const与#define区别

const与#define相比有何不同?

题目解析:const做类型安全检查,而#define不做;在很多调试工具中,可以追踪const,不能追踪#define,在C++中只用const不用#define。


  • 考察sizeof函数和内存对齐
struct{short a1;short a2;short a3;}A;

struct{long b1;short b2;}B;

int main()
{
    char *str1="0123456789";cout<
输出结果:
4
11
100
400
4

3
4
8
8
6

16

题目解析:
str1和c3 为指针,大小为定值即4;
str2大小为定,填充值为10个字符,加上隐含的"\0",即为11;

str3初始化为100位,即为100;
str4初始化为100个,每个int为4,即为400;
c1字符组为3位,加上隐含的"\0",即为4位;

c2字符组中"\n"为1位,加上隐含的"\0",即为3位;
结构体A中有3个short变量,每个short为2字节,故结构体按最长的数据2字节对齐,A的大小为6字节,是2的整数倍,故为6;

结构体B中有1个long和1个short变量,每个long为8字节,故结构体按最长的数据4字节对齐,B的大小为6字节,应为8的整数倍,故为16。


  • 考察指针占用空间

int **a[3][4]占用多少字节?

结果:48

题目解析:3*4*4。


  • 考察类的内存占用
class A
{
float f;
char c;
int a[3];
}

求sizeof(A)。

结果:20

题目解析:float占4个字节,char占1个字节,int[]占12个字节,共17字节,按照内存对齐原则,应为4的倍数,即为20字节。


一个空类占用多少内存?多重继承的空类呢?

结果:空类占用1字节,单一或多重继承的空类占用1字节,但虚函数涉及到指针占用4字节。

?struct{short a1,short a2,short a3}A;
char c1[]="abc";

你可能感兴趣的:(后端开发)