Linux操作系统使用及C高级编程-D11-D13结构体

        由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”,其描述了一块内存空间的大小及解释意义。

        语法:

        struct 结构体名

        {

                结构体成员列表

        };

        下图是struct的定义和使用方法,其中20行这种赋值方式错误,因为字符串是常量,只能在定义时就进行赋值,不能在后面赋值了,赋值是通过19行​​​​​​​

Linux操作系统使用及C高级编程-D11-D13结构体_第1张图片

当然也可以直接定义时就进行赋值 

 

 局部赋值方式

 结构体数组

将自定义的结构体放入到数组中方便维护

 语法:

        struct 结构体名 数组名[元素个数] = {{},{},......{}}

Linux操作系统使用及C高级编程-D11-D13结构体_第2张图片

 结构体指针

        通过指针访问结构体中的成员

struct 结构体名 *指针名;

        利用操作符->可以通过结构体指针访问结构体属性

指针指向了结构体地址

Linux操作系统使用及C高级编程-D11-D13结构体_第3张图片

 ​​​​​​​Linux操作系统使用及C高级编程-D11-D13结构体_第4张图片

 结构体嵌套

Linux操作系统使用及C高级编程-D11-D13结构体_第5张图片

Linux操作系统使用及C高级编程-D11-D13结构体_第6张图片

 结构体大小

Linux操作系统使用及C高级编程-D11-D13结构体_第7张图片

Linux操作系统使用及C高级编程-D11-D13结构体_第8张图片

 字节对齐

        针对结构体而言,通常编译器会自动对其成员变量进行对齐,以提高数据存取效率

        1、移植原因:不是所有的硬件平台都能访问任意地址上的任意数据;某些硬件平台只能在某些地方处取某些特定类型的数据,否则抛出硬件异常

        2、数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因是,为了访问未对齐地内存,处理器需要作两次内存访问;而对齐地内存访问仅需要一次访问。

结构体大小计算方法

        自身对齐:数据类型本身大小

        默认对齐:电脑

        有效对齐:结构体最终以多少字节对齐(取自身和默认的最小值)

                地址要能够整除有效对齐,所以导致了会浪费一些地址

Linux操作系统使用及C高级编程-D11-D13结构体_第9张图片

 下面左图是struct A,右图是struct C

 ​​​​​​​Linux操作系统使用及C高级编程-D11-D13结构体_第10张图片Linux操作系统使用及C高级编程-D11-D13结构体_第11张图片

 位域

        是把一个字节中的二进制位分为几个不同区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同对象用一个字节的二进制位域来表示

Linux操作系统使用及C高级编程-D11-D13结构体_第12张图片

Linux操作系统使用及C高级编程-D11-D13结构体_第13张图片

定义并 赋值

Linux操作系统使用及C高级编程-D11-D13结构体_第14张图片

 

你可能感兴趣的:(c语言,开发语言)