🌳 概念
sizeof是C/C++中的一个操作符(operator),如C语言的其他操作符++、–等。它并不是函数。简单的说其作用就是返回一个表达式或括在括号内的类型名所占的字节大小。
注:以下在64位平台上测试
🌳 用于内置数据类型
cout << "sizeof(char):" <<sizeof(char)<< endl;
cout << "sizeof(int):" <<sizeof(int)<< endl;
cout << "sizeof(long):" <<sizeof(long)<<endl;
cout << "sizeof(long):" <<sizeof(double)<<endl;
输出:
🌳 用于变量
int iValue = 0;
cout << "int iValue:" <<sizeof(++iValue)<< endl;
cout << "++iValue:" <<iValue<< endl;
double fValue = 0.0;
cout << "double fValue:" <<sizeof(fValue)<<endl;
输出:
注意iValue没有加1;
🌳 用于函数
auto fun = [](){
cout << "lamda"<<endl;
return 8;
};
cout << "函数:" <<sizeof(fun)<<endl;
输出:
注意没有打印 lamda;
🌳 用于指针
char *pt1;
cout << "char 指针:" <<sizeof(pt1)<<endl;
double *pt2;
cout << "double 指针:" <<sizeof(pt2)<<endl;
输出:
🌳 用于数组
char str1[10] = "abc";
cout << "sizeof(str1) :" <<sizeof(str1) << endl;
cout << "sizeof(*str1):" <<sizeof(*str1) << endl;
auto fun1 = [](char str[10]){
cout << "一维函数形参:"<<sizeof(str)<<endl;
};
fun1(str1);
char str2[] = "abc";
cout << "str2[]:" <<sizeof(str2) << endl;
char str3[] = {'a', 'b', 'c'};
cout << sizeof(str3) << endl;
char str4[] = "";
cout << sizeof(str4) << endl;
char str5[10][9];
cout << sizeof(str5) << endl; // 90
auto fun2 = [](char str[10][9]){
cout << "二维数组函数形参:"<<sizeof(str)<<endl;
};
fun2(str5);
** str是一个字符数据,函数fun1、fun2的形惨都是指针。*
🌳 用于联合体
union unionA
{
char c1;
int i;
char c2;
double d;
};
cout << "sizeof(unionA):" <<sizeof(unionA) << endl;
联合体输出最大的字节长度
🌳 用于自定义结构体
struct structA
{};
struct structB
{
int i;
double f;
};
struct structC
{
double structf;
int i;
};
输出:
structA为1是编译器实,structB和structC考虑内存对齐
🌳 用于自定义类型
class classA
{};
class classB
{
private:
int i;
};
class classC
{
public:
virtual void test();
};
class classD
{
private:
int i;
public:
void test();
};
class classE
{
private:
int i;
public:
virtual void test();
};
class classF
{
private:
int i;
int j;
public:
virtual void test();
};
class classG
{
private:
static int i;
};
class classL
{
private:
static int i;
int j;
};
cout <<"classA:" <<sizeof(classA) << endl;
cout <<"classB:" <<sizeof(classB) << endl;
cout <<"classC:" << sizeof(classC) << endl;
cout <<"classD:" << sizeof(classD) << endl;
cout <<"classE:" << sizeof(classE) << endl;
cout <<"classF:" << sizeof(classF) << endl;
cout <<"classG:" <<sizeof(classG) << endl;
cout <<"classL:" << sizeof(classL) << endl;
输出:
classA为1编译器实现,classC虚函数,有虚函数指针所以为8,classE为16是因为内存对齐,
classG为1 是因为静态成员变量不属于某一对象。