3 c/c++ sizeof

本文详细介绍了 C/C++ 中 sizeof 运算符的功能和用法,包括基本数据类型、结构体、联合体、指针和数组等不同场景下的应用,并解释了内存对齐等相关概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c/c++ sizeof

实验平台:win7 64位 code blocks

定义

sizeof是操作符

作用:返回一个对象或类型所占的内存字节数

返回值类型为size_t。

(size_t在头文件stddef.h中定义,它依赖于编译系统的值,一般定义为 typedef unsigned int size_t)

语法

  1. sizeof (object); //sizeof (对象)
  2. sizeof object; //sizeof 对象
  3. sizeof (type_name); //sizeof (类型)

使用

  1. 基本数据类型

    short、int、long、float、double等内置数据类型。由于它们的内存大小和系统相关,所以在不同的系统下取值可能不同。

  2. 结构体

    sizeof(结构体) = 内存对齐后的字节数

    void test_struct(){
       struct S1
       {
           char a;
           int b;
       };
       cout<<sizeof(S1)<<endl; //值为8,由于字节对齐,会在char之后会填充3个字节.
    
       struct S2
       {
           int a;
           char b;
           char c;
       };
       cout<<sizeof(S2)<<endl; //值为8,由于字节对齐,在char c之后会填充2个字节.
    
       struct S3
       {
       };
       cout<<sizeof(S3)<<endl; //值为1,空结构体也占内存.
    }
  3. 联合体

    sizeof(联合体) = max(sizeof(联合体中的成员))

    void test_union(){
       union u1
       {
           int a;
           float b;
           double c;
           char d;
       };
       cout<<sizeof(u1)<<endl; //值为8
    
       union u2
       {
           int a;
           float b;
           double c;
           char d;
           int e[10];
       };
       cout<<sizeof(u2)<<endl; //值为40
    }
  4. 指针

    指针是用来记录一个对象的地址,所以指针的内存大小等于计算机内部地址总线的宽度。

    sizeof(指针)与指针类型无关,在同一计算机下,所有的指针大小均相同。

    void test_ptr(){
       cout<<sizeof(double*)<<endl; //4
       cout<<sizeof(float*)<<endl;  //4
       cout<<sizeof(int*)<<endl;    //4
       cout<<sizeof(char*)<<endl;   //4
       cout<<sizeof(bool*)<<endl;   //4
    }
  5. 数组

    sizeof(数组) = 数组所占的内存字节数

    注:当字符数组表示字符串时,其sizeof值将’/0’计算进去

      当数组为形参时,其sizeof值相当于指针的sizeof值 
    
    void test_array()
    {
       char a[] = {1,2,3,4,5,6};
       char b[] = "123456";
       char* c = b;
       cout<<sizeof(a)<<endl;      //6
       cout<<sizeof(b)<<endl;      //7
       cout<<sizeof(c)<<endl;      //4,所求为指针大小
    }
  6. 类的实例

    以string为例

    void test_object(){
        string a = "123456";
        cout<<sizeof(a)<<endl;    //4,求的是string的实例a所占字节大小
        cout<<a.size() + 1<<endl; //7,求a中的字符串长度,size()不包含'\0'
    }

请尊重作者的劳动,转载请注明作者及原文地址(http://blog.youkuaiyun.com/lis_12/article/details/55102322).

如果觉得本文对您有帮助,请点击‘顶’支持一下,您的支持是我写作最大的动力,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值