sizeof操作符使用讲解

🌳 概念

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 是因为静态成员变量不属于某一对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值