• C++中将 sizeof( )用于指针的结果


    C++中将 sizeof( )用于指针的结果

    sizeof 是一个关键字、操作符,也是一个编译时运算符,其作用是返回一个对象或者类型所占的内存字节数

    对于sizeof的理解,sizeof:

    首先是一个关键字,也是一个操作符,而非函数。

    其次求长度,返回一个对象或者类型所占的内存字节数。

    总结一下:sizeof更像一个特殊的宏,它是在编译阶段求值的。不要把sizeof当成函数,也不要看作一元操作符,把他当成一个特殊的编译预处理。

    sizeof 运算符可用于获取类、结构、共用体和其他用户自定义数据类型的大小。指针变量的sizeof 值与指针所指的对象没有任何关系。

    sizeof() 的使用方法:

    sizeof(object); 	//sizeof(对象);
    sizeof(type_name); 	//sizeof(类型);
    sizeof object; 		//sizeof对象;【不常用】
    
    • 1
    • 2
    • 3

    您知道,指针是包含内存地址的变量。因此无论指针指向哪种类型的变量,其内容都是一个地址——一个数字。在特定的系统中,存储地址所需的字节数是固定的。因此,将 sizeof( )用于指针时,结果取决于编译程序时使用的编译器和针对的操作系统,与指针指向的变量类型无关,以下示例程序演示了这一点:

    #include 
    using namespace std;
    
    int main()
    {
        cout << "sizeof fundamental types -" << endl;
        cout << "sizeof(char) = " << sizeof(char) << endl;
        cout << "sizeof(int) = " << sizeof(int) << endl;
        cout << "sizeof(double) = " << sizeof(double) << endl;
    
        cout << "sizeof pointers to fundamental types -" << endl;
        cout << "sizeof(char*) = " << sizeof(char*) << endl;
        cout << "sizeof(int*) = " << sizeof(int*) << endl;
        cout << "sizeof(double*) = " << sizeof(double*) << endl;
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出:

    sizeof fundamental types -
    sizeof(char) = 1
    sizeof(int) = 4
    sizeof(double) = 8
    sizeof pointers to fundamental types -
    sizeof(char*) = 4
    sizeof(int*) = 4
    sizeof(double*) = 4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    分析:

    输出表明, 虽然 sizeof(char)为 1 字节, 而 sizeof(double)为 8 字节, 但 sizeof(char *) 和 sizeof(double *) 都是 4 字节。这是因为不管指针指向的内存单元是 1 字节还是 8 字节,存储指针所需的内存量都相同。

    注意:

    示例程序的输出表明,将 sizeof 用于指针的结果为 4 字节,但在您的系统上结果可能不同。这里的输出是使用 32 位编译器编译代码时得到的,如果您使用的是 64 位编译器,并在 64 位系统上运行该程序,可能发现将 sizeof 用于指针的结果为 64 位,即 8字节。
    
    • 1

    该文章会更新,欢迎大家批评指正。

    推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
    分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
    fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
    TCP/IP,协程,DPDK等技术内容
    点击立即学习:C/C++后台高级服务器课程

  • 相关阅读:
    【OOM-笔记】
    天津WEB前端培训哪家好?Web机构推荐!
    快手根据ID取商品详情 API 返回值说明
    【云原生】设备云之FlexManager历史数据的运用
    IDL学习——哨兵2 L1C数据辐射定标
    Banana Pi开源社区开源硬件瑞芯微RK3568/RK3588全国产化支持计划
    【力扣-二叉树-01】在二叉树中分配硬币-力扣 979 题
    1、SySeVR环境配置(上)
    VUE+VScode+elementUI开发环境
    你了解供应链云仓系统源码里的5个核心功能吗?
  • 原文地址:https://blog.csdn.net/qq_41317716/article/details/133400098