原文: http://blog.163.com/xiangzaihui@126/blog/static/1669557492011825111853370/
一直都认为C++学的可以,现在才发现被鄙视了,一些非常基础的知识搞不清楚。
sizeof一些小解。
一:
#include <iostream>
using namespace std ;
class A
{
public :
int a ;
static int b ;
A() ;
~A() ;
}; //sizeof = 4 很简单。
class B
{
public :
int a ;
char b ;
B() ;
~B() ;
}; //sizeof = 8 内存对齐,数据对齐
class C
{
public :
float a ;
char b ;
C() ;
~C() ;
}; //sizeof = 8 内存对齐,数据对齐
class D
{
public :
float a ;
int b ;
char c ;
D() ;
~D() ;
}; //sizeof = 12 内存对齐,数据对齐
class E
{
public :
double a ;
float b ;
int c ;
char d ;
E() ;
~E() ;
}; /* 关键是这个,我一直都以为会是20,结果才发现如果没有#pragma pack 的话对齐系数是由内中最大的数据成员的大小决定的,也就是对齐系数由double决定。sizeof = 24 因为 char d 的时候是17,而数据,内存对齐后需要转换成24 如果不懂得可以看看我的前面一篇文章
int main()
{
cout << sizeof( A ) << endl ;
cout << sizeof( B ) << endl ;
cout << sizeof( C ) << endl ;
cout << sizeof( D ) << endl ;
cout << sizeof( E ) << endl ;
return 0 ;
}
二:
#include <iostream>
using namespace std ;
void fun( char ch[] )
{
cout << sizeof( ch ) << endl ;
}
int main()
{
char ch[] = "adsasd" ;
fun( ch ) ;
return 0 ;
}
先了解下面这个事:
void fun( char ch[] )
Void fun( char* ch )
Void fun( char ch[10] )
上面三条语句都是相等的,上面的ch都会转换指针,在fun函数中ch是指针而不是数组的第一个元素的地址。
因此上面三条语句,无论那条cout << sizeof( ch ) << endl ; 都会得到 4 , Int(指针) 的大小。