C++结构体和共用体



结构体和共用体变量的sizeof


MaiziTest14.cpp : 定义控制台应用程序的入口点。


1.结构体变量的sizeof


struct ExS1
{
short s1;//short的偏移量必须是2的倍数
int i1;//int型必须是4的倍数
char c1;//char的偏移量必须是1的倍数
};


sizeof(ExS1) ?= 1 + 2 + 4 = 7 ??????这牵扯到字节对齐机制。


1)结构体变量的首地址能够被其最大宽度基本类型成员的大小所整除;


2)结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如果有需要,编译器会在

成员之间加上填充字节;


3)结构体的总大小为结构体最宽基本类型成员大小的整数倍。


2.共用体的sizeof


#include "stdafx.h"
#include<iostream>
using namespace std;
 
union Ex
{
double x;
char y[13];
};
 
struct ExS1
{
 
short s1;//short的偏移量必须是2的倍数
int i1;//int型必须是4的倍数
char c1;//char的偏移量必须是1的倍数
};
 
int _tmain(int argc, _TCHAR* argv[])
{
cout<<sizeof(ExS1)<<endl;
cout<<sizeof(Ex)<<endl;
return 0;
}


3.运行结果


derived5.png


derived6.png


derived7.png



课后作业


1.求出B的sizeof


struct A
{
char c1;
short s1;
int i1;
};
struct B
{
char c1;
A a;
char c2;
};


2.求出Ex的sizeof


union Ex
{
int ix;
double dy;
}



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

有一位课程导师想与你聊聊

客服热线 400-862-8862

回到顶部