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
- Sizeof与strlen区别
Strlen计算字符串长度(不包含”\0”),类型只能是char*
Char* ss= “0123456789”;
Sizeof(*ss);//1 ,*ss是第一个字符
Strlen(ss);//10
- 其它:sizeof(double)为8

浙公网安备 33010602011771号