关于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;

主要原因是由于字节对齐

原文地址:https://www.cnblogs.com/zhuyaguang/p/5644704.html