• 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++后台高级服务器课程

  • 相关阅读:
    《Fundamantals of Software Architecture》 Q&A Part2
    python模块下载
    797. 所有可能的路径
    Java自学注意细节快速成长
    kubeadm安装kubernetes
    leecode |美化数组的最小删除个数
    凉鞋的 Unity 笔记 107. Project 文件系统窗口
    mocha测试框架
    云表|低代码开发崛起:重新定义企业级应用开发
    实践数据湖iceberg 第三十八课 spark sql, Procedures语法进行数据治理(小文件合并,清理快照)
  • 原文地址:https://blog.csdn.net/qq_41317716/article/details/133400098