C++ sizeof(类名问题)

 我来答
风若远去何人留
2017-08-21 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部

首先一点, 

typedef 是用来定义新类型的。 所以

typedef char m_c20[20];

这一句并不是定义了一个成员变量m_c20,而是一个类型。 所以这句在本程序中没有实际意义。

后续你可以m_c20 m_cc;这样定义变量,但这里并没有。

所以 sizeof (A)就是 m_b, m_d这两个占的字节数。

注意 m_a由于是static的,所以不在sizeof计算之中。

m_b是4字节。 m_d是8字节,于是8字节对齐,最终sizeof为16.

为验证这一点,你可以把A改成这样几种形式:


class A
{
int a;
double b;
};
输出16
2
class A
{
int a;
double b;
static int m;
};
输出16
3
class A
{
int a;
double b;
int m;
};
输出24
4
class A
{
int a;
int m;
double b;
};
输出16
更多追问追答
追问
无懈可击
今天详细看起来,有一点疑问,我是32位的编译环境,这样了话寻址就是4,然后我测试了你24字节那个居然也输出24
匿名用户
2017-08-20
展开全部
你把class换成struct
另外删除那个 typedef
再运行程序看看
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式