常見sizeof統計

#i nclude "stdafx.h"
#i nclude   <iostream>  
#i nclude "string"

using namespace std;
class A
{
};

class B
{
 int a;
 static int c;
};
struct Strcut1
{
 int a;
 int* c;
};
int   main(int   argc,   char*   argv[])  
{  
 int Array[]={1,2,3};
 int *pInt;
//class
 cout<<" class:/n"<<sizeof(A)<<endl;//空類也有一個位置
 cout<<sizeof(B)<<endl;//static 不佔類位置
//int
 pInt=Array;
 cout<<"  Int:/n"<<sizeof(Array)<<endl;//它與字符數組有區別,不會多一位'/0'
 cout<<sizeof(pInt)<<endl; //指針
// string
 string str("foobar");
 string *ps=&str;
 cout<<"  string:/n"<<sizeof(str)<<endl;//元素本身大小,與字符cbar不同
 cout<<sizeof(*ps)<<endl;//引用,與原類型一樣大
 cout<<sizeof(ps)<<endl;//指針
//char
 char ch[]="Hello world";
 char *pCh="Hello world";
 cout<<"  char:/n"<<sizeof(ch)<<endl;//注意這裏加一個位'/0'
 cout<<sizeof(pCh)<<endl;//指針
 cout<<sizeof(*pCh)<<endl;//一個元素,位置爲1
 cout<<strlen(ch)<<endl;//沒有統計'/0'
 cout<<strlen(pCh)<<endl;//與上面一樣大
//type
 cout<<"  Type:/nShort*="<<sizeof(short*)<<endl;//指針
 cout<<"Short&="<<sizeof(short&)<<endl;//引用
 cout<<"Int*="<<sizeof(int*)<<endl;//指針
 cout<<"intt&="<<sizeof(int&)<<endl;//引用
 
 return   0;  
}  

再補一些:
     char *p;
    char *q[20];
    char *m[20][20];
    int (*n)[10];
    struct MyStruct
{
char dda;
double dda1;
int type ;
};
MyStruct k;

 printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(k));

答案:4,80,1600,4,24

第二個是指針數組,共20個指針,第三個也是,第四個是一個數組指針,第五個結構體,第二個是double類型,所以以8對齊,如果把int放在第二個,就是以4對齊。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章