结构体类型创建,初始化及内存对齐。

   今天我们来说一下自定义类型,包含结构体,位段,联合,枚举。

   首先来看结构体所包含的要点,结构体类型创建 ,结构体初始化及结构体内存对齐的问题。

   一、结构体类型的创建分为两大类。

   1,有名结构体的创建

   (1). 定义类型的同时,完成变量的定义。

    

struct  Student
{
char name[100] ;
char sex  ;
int  age  ;

}stu;


   struct Student 称为类型,student为变量。


   (2).先有类型,再定义变量。

struct Student
{
char name[100];
char sex;
int  age;
};
struct student s;



    2,匿名结构体的创建

struct
{
char name[100];
char sex;
int age;
}student;


  二、结构体初始化

  1.定义的同时初始化。

     

struct student 1={"毛毛","女",20};

  2.先定义再逐个初始化

  

struct student 2;
student 2 name = "毛毛";
student 2 sex  = "女";
student 2 age  = 20;

  3.先定义再一次性初始化

  

struct student 3;
3 = (struct student){"毛毛" ,"女" ,20};

  4.指定将数据赋值给指定的属性

  

struct student 4 = { name="毛毛",sex = "女",age = 20};


  三、结构体内存对齐

  结构体的内存对齐有两个原则。

  1.结构体中的每个元素按照定义顺序一个个放入内存中,但并不是紧密排列的,从结构体存储的首地址开始,元素都按照自己的大小来划分内存,所以元素放置的位置一定在自己宽度的整数倍上开始。

  2.根据第一个原则计算后,检查计算出的结果是不是存储单元中最宽元素长度的整数倍,如果不是,则要补齐为它的整数倍。

  举个例子

struct X
{
char a;
double b;
int c;
}
s;
  此例中,a占了内存中第0个字节,b进入存储单元的时候,以自己的8个字节进行划分,认为第一个 八字节已经被占用,所以b占了第8到第15个字节,当c进入存储单元的时候,以自己的4个字节进行划分,认为前三个 四字节的空间已经被占用,所以c占用第16到第19个字节。即计算出的结果为20,但20不为8的整数倍,所以补齐应为24。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值