Sizeof面试考点总结

 

  • Sizeof()的对象是指针时,大小为4

因为指针的大小是一个定值,是指针变量占用内存的大小(字节数).在32位机上,所有指针类型变量占用内存字节数都为4因为32位机就是 4字节 * 8个二进制位/字节 计算出来的.同理如果在64位机上,指针占用内存大小就是8个字节。

比如:

Char* ss1 = “0123456789”;

Char* q3 = “a\n”;

Char* str1 = (char*)malloc(100);

Void* str2 = (void*)malloc(100);

 

以上的sizeof(ss1),sizeof(q3),sizeof(str1),sizeof(str2)都为4

  • Sizeof对象为数组名有下面几种情况:

提示:数组名只有在作为sizeof对象时才代表整个数组,其它情况数组名代表数组首地址。

a)         数组未定义大小,sizeof结果为值的数量加1(指”\0”)

Char ss1[] = “0123456789”;

Sizeof(ss1);       //11,10+1

特殊的\n符号也算作一位

Char q1=”a\n”;

Sizeof(q1);//3

b)         数组定义大小,sizeof结果为定义值

Char ss2[20]=”0123456789”;

Sizeof(ss2);//20

c)         字符数组没赋值时,数组名转换为指针,大小为4

Cahr var[10]

Int test(char var[])   //var[]等价于*var

{

Return sizeof(var);

};

Sizeof(var);//4

d)         多维数组时,sizeof的大小是多维数的乘积*数组元素的大小

Char c[2][3] = {”aa“,”bb”};//7

Sizeof(c);//6=2*3

  • Sizeof对象为类或struct时

a)         类里面有多重数据类型,要根据数据对齐判断

Calss B

{

Private:

Bool m_bTemp;//1

Int m_nTemp;//4

Bool m_bTemp2;//1

};

Class C

{

Private;

Int m_nTemp;//4

Bool m_bTemp;//1

Bool m_bTemp2;//1

};

 

sizeof(B) ;//12

sizeof(A);//8

b)         空类和多重继承类为1

c)         虚继承涉及虚表(虚指针),所以为4

Clss A{};

Class B:public virtual A

{};

Sizeof(B)//4

d)         包含虚函数的类,由于含有一个指向虚函数表的指针,所以为4

Class Base{

         Virtual void f(int){cout<<”Base::f(int)”<<endl};

         Virtual void f(double){cout<<”Base::f(double)”<<endl};

}

Sizeof(Base)为4

    1. Sizeof与strlen区别

Strlen计算字符串长度(不包含”\0”),类型只能是char*

Char* ss= “0123456789”;

Sizeof(*ss);//1 ,*ss是第一个字符

Strlen(ss);//10

  • 其它:sizeof(double)为8
posted @ 2014-08-26 15:58  10号  阅读(219)  评论(0)    收藏  举报