zoukankan      html  css  js  c++  java
  • 关于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;

    主要原因是由于字节对齐

  • 相关阅读:
    选择器的区别
    固定DIV样式
    图片自适应不变形
    CSS实现图片在div a标签中水平垂直居中
    2017年校招全国统一模拟笔试 页码统计
    LeetCode 23. Merge k Sorted Lists
    LeetCode 15. 3Sum
    LeetCode 12. Integer to Roman
    LeetCode 11. Container With Most Water
    LeetCode 8. String to Integer (atoi)
  • 原文地址:https://www.cnblogs.com/zhuyaguang/p/5644704.html
Copyright © 2011-2022 走看看