自定义结构体变量

一、引言

生活中我们常常需要存储基本信息,那如果将这些基本信息存储在不同的表格、数组中,想必大家会非常头大,一个数据的输入错误,就会牵一发而动全身,导致整个表格输入错误。一向以简洁著称的C语言可不会袖手旁观,结构体变量也就应运而生了。

二、结构体变量类型

俗话说:“没有规矩,不成方圆”。结构体变量又遵循着什么特殊的格式、规则呢?struct作为结构体声明的关键字,那肯定是与其他类型变量有相似之处。

我们创建变量时:type(类型名)+变量名

那何为自定义类型呢?也就是这个类型是使用者通过结构体自定义的类型,既然用结构体自定义类型,那我是不是可以创建类型名,这当然是可以的。

下面John就来剖析struct自定义结构体类型变量:

struct(自定义结构体的关键字)+类型名(自定义)

{

变量类型(int,char,double,short诸如此类,当然可以创建多个变量)+变量名;

}全局变量初始化(自定义,不用加关键字和结构体变量类型名);(PS:这个逗号不要忘记加,John初学C语言打代码时,总是忘记输入这个逗号,特别提醒大家不要跟我犯同样的错误。)

值得一提的是struct的局部变量每次初始化时都要加上:

struct(自定义结构体的关键字)+类型名(自定义)+变量名(也是自定义)={,}(输入自定义struct类型中对应的变量,并用逗号‘,’隔开)

此外还可以用(.)和(->)结构体操作符访问结构体类型中的变量用法为:

结构体变量名.结构体类型中的变量名

结构体变量名->结构体类型中的变量名(访问结构体变量的地址)            也就是       

(*结构体变量名).结构体类型中的变量名(结构体类型名括号不能丢,为什么要这样写呢?则是因为'.'运算操作符优先级比指针运算操作符高。)

三、结构体的存储

基于一个复杂的原因,所以John不做过多解释结构体的存储存在内存对齐的原因,当然有兴趣的同学可以找John探讨一下。为了更加快捷的访问结构体内存,结构体内存储存在内存对齐,避免二次访问,大大提升了访问效率。在不同编译器中存在不同的默认对齐数不同【当然也可以通过这行代码来更改对齐数#pragma pack(对齐数)】在结构体变量中的第一个变量存储的起始变量(变量存储以字节为单位存储)的偏移数默认为0(以此类推它的第二个字节偏移数为1),第一个变量之后的变量则需要根据它的类型所占字节数与编译器的默认对齐数进行比较孰大孰小,按照较小的数的整数倍等于存储在偏移数存储,值得一提的是结构体变量的内存大小也是所有较小的数中最大的数(相当于矮子中的高个)的整数倍。如果同学们有什么疑问,可以私信给John,John虽然有点忙,但还是会回复的,只是回复的时间可能会过晚,请大家见谅!

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值