sizeof 的陷阱

原文: 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(指针) 的大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值