• 关于sizeof,你看我就够了


    本文收集了《程序员面试宝典》和《C和C++程序员面试秘籍》中的关于sizeof的题目,让大家一次性解决sizeof问题

    1.使用sizeof计算普通变量所占空间的太小

    char str[] = "Hello";
    char *p = str;
    int n = 10;
    

    sizeof(str)=
    sizeof(p)=
    sizeof(n)=
    void Func (char str[100])
    {
        sizeof(str)=
    }
    void *p = malloc(100)
    sizeof(p)=
    

    解答:

    • 对数组变量做sizeof运算得到的是数组占用内存的总大小,加上数组中有一个元素’‘所以为6
    • p为指针变量,n为int型变量。在32位平台下,指针和int都是4个字节,所以结果为4
    • str为函数的参数,调用函数Func(str)是 地址传递,所以str是一个指针来指向数组,所以结果为4
    • p还是一个指针,所以还是4

    2.使用sizeof计算类对象所占空间大小

    #include <iostream.h>
    
    clsaa A
    {
    public:
        int i;
    };
    
    class B
    {
    public:
        char ch;
    };
    
    class C
    {
    public:
        int i;
        short j;
    };
    
    class D
    {
    public:
        int i;
        short j;
        char ch;
    };
    
    class E
    {
    public:
        int i;
        int ii;
        short j;
        char ch;
        char chr;
    };
    
    class F
    {
    public:
        int i;
        int ii;
        int iii;
        short j;
        char ch;
        char chr;
        
    };
    
    int main()
    {
       cout<<sizeof(int)<<endl;
       cout<<sizeof(short)<<endl;
       cout<<sizeof(char)<<endl;
       cout<<endl;
       cout<<sizeof(A)<<endl;
       cout<<sizeof(B)<<endl;
       cout<<sizeof(C)<<endl;
       cout<<sizeof(D)<<endl;
       cout<<sizeof(E)<<endl;
       cout<<sizeof(F)<<endl;
       return 0;
    }
    

    解答:在32位操作系统环境下,char占一个字节,int占4个字节,short占2个字节

    sizeof(A) = 4;
    sizeof(B) = 1;
    sizeof(C) = 4+2=6;
    sizeof(D) = 4+2+1=7;
    sizeof(E)= 24+21+2=12;
    sizeof(F)= 34+21+2+2=15;


    实际的结果却是:

    sizeof(A) = 4;
    sizeof(B) = 1;
    sizeof(C) = 8;
    sizeof(D) = 8;
    sizeof(E)= 12;
    sizeof(F)= 16;

    主要原因是由于字节对齐

  • 相关阅读:
    elastic-job详解(二):作业的调度
    elastic-job详解(一):数据分片
    定时任务的分布式调度
    HBase多条件及分页查询的一些方法
    TP6多应用模式配置
    Swoole WebSocket 服务端如何主动推送消息?
    mysql(多级分销)无限极数据库设计方法
    django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
    Centos7安装并配置Python3环境
    short url短链接原理
  • 原文地址:https://www.cnblogs.com/zhuyaguang/p/5644704.html
Copyright © 2020-2023  润新知