#include"iostream.h"
class Myclass
{
double a;
int x,y;
char b;
};
void main()
{
cout<<sizeof(Myclass)<<endl;
}
我认为是8+4+4+1+3=20;但结果却是24,请帮忙!!

解决方案 »

  1.   

    这是编译器之间的差别,确切的值应该是17,不信你可以看下面的代码:
    #include "stdafx.h"
    #include"iostream.h"
    #include "stdio.h"
    class Myclass
    {
    double a;
    int x,y;
    // char b;
    };
    void main()
    {
    cout<<sizeof(double)<<endl;
    cout<<2*sizeof(int)<<endl;
    cout<<sizeof(char)<<endl;
    cout<<"Total size:"<<sizeof(Myclass)<<endl;
    getchar();
    }
      

  2.   

    #include<iostream.h>
    class Myclass
    {
    int a,b,c,d;
    char k;

    };
    void main()
    {
    cout<<sizeof(Myclass)<<endl;
    }
    那为什么结果又是20?
      

  3.   

    编译器的"优化"
    sizeof(c1) = sizeof(c2) = sizeof(c3) = 8
    class c1
    {
    int i;
    char a;
    };
    class c2
    {
    int i;
    char a;
    char b;
    };
    class c3
    {
    int i;
    char a;
    char b;
    char c;
    };
    你做的东西和这个有关系吗,如果没有赶快继续
      

  4.   

    经试验发现VC编译器计算类大小时是按照4或8做单位的,所以不会出现17,15。之类的大小,只会出现4,8,16,24
    以下是试验代码;
    char a,b,c,d,f,g,h,j,k,l,p;
    double e;
    int x;
    的到数值是32,现在教你怎么计算,因为这里有double类型的变量,所以以8为单位
    char a,b,c,d,f,g,h,j,k,l,p;因为有11的变量,合起来超过8所以大小是16,e是8,x虽然是4但是以8为单位所以是8,
    所以最终是32int a,b,c,d;
    char k;因为有int所以以4为单位,所以k占个单位却安4计算所以是20
    同理
    int a,b,c,d;
    char k,j,y;
    他的结果也是20,kjy合起来是3没超过4,安4计算
    int a,b,c,d;
    char k,j,y,c,m;
    这个计算出来就是24,尽管kiycm合起来是5但超过4所以安8计算
      

  5.   

    补充一句,没有特殊要求是VC编译器将按照类中最长的数据类型计算单位
    如只有char时
    char a,b,c,d,f,g,h,j,k,l,p;
    类长度就是11
      

  6.   

    可以通过Project->setttings->c/c++->code generation的struct member alignment来改变它的对齐方式!
      

  7.   

    正如AthlonxpX86(一滴水)所说的!
      

  8.   

    她肯定是24而不是20,为什么呢?
    因为这些cpu经过证明是没有bug的