当前位置:   article > 正文

c语言-结构体

c语言-结构体

8、结构体

目录

8、结构体

一、结构体是什么?

二、结构体的意义?

三、结构体的表现形式?

四、结构体的空间大小?

1、用sizeof()来求        

2、用sizeof()来计算结构题的空间大小分为三步:

五、结构体的应用

1、结构体变量的定义

(1)在声明类型的同时定义结构体变量

(2)先声明结构体类型,再定义结构体变量

2、初始化

3、应用 --输入输出

补充:

一、结构体是什么?

                --  是数据类型

二、结构体的意义?

1、保存一个数据类型的数据         -- 是基本数据类型         -- “变量”

2、保存多个具有相同数据类型的数据                                --  “数组”

3、保存多个具有不同数据类型的数据                                -- “结构体”

alt text

4、保存多个数据类型的数据,且地址不连续                        -- “链表”          --数据存储形式

三、结构体的表现形式?

1、是第一个自定义类型       
        -- struct 类型名{成员变量;};

alt text

注:没有类型名也行,但是无法引用

2、定义类型时是否占用内存空间?

        -- 不占用内存空间         -- 仅是声明类型的内容,不开辟空间。(在main函数之上)

四、结构体的空间大小?

1、用sizeof()来求        

-- 该函数的作用是获取数据类型的空间大小

2、用sizeof()来计算结构题的空间大小分为三步

        1)找到结构体中(基本数据类型中)最大的成员变量所占的字节数。(其实就是最大的基本数据类型的字节长度)

        2)结构体中成员变量的起始地址为该成员变量大小的整数倍(一般情况下我们认为第一个成员变量的其实地址为0)。

        3)结构体变量的总大小必须要是结构体中最大变量字节的整数倍(不足补齐)。

例1:

alt text

注:首先,起始地址是0,那么int的起始地址是char数组的整个长度,就是20,20是sizeof(int)--“4”的整数倍,所以不用补,直接加4,然后起始地址变为24,之后与double比较,发现是sizeof(double)的整数倍,所以不用补,直接加8,起始地址变为32,最后拿32再与结构体中最大的基本数据类型的长度比较,也就是看32是不是sizeof(double)的整数倍,如果是就不用再变了。 如果不是,补齐即可,不用再加。

例2:

alt text

注:结构体student1中,起始地址是0,然后加上char的长度是1,起始地址变为1,然后拿1与结构体数据类型中的最大数据类型长度比较(这里就是sizeof(double)),发现不是它的整数倍,于是加到8,然后再加上结构体的总长度,就是40,然后将40与student1中最大的数据类型的比较,发现是它的整数倍,所以不用再变了。

五、结构体的应用

1、结构体变量的定义
(1)在声明类型的同时定义结构体变量

alt text

alt text

-- 类型名写于不写都可以

(2)先声明结构体类型,再定义结构体变量

        a.普通的定义

alt text

        b.宏定义             -- #define

        -- 它是预处理中的宏定义命令,在预处理时进行简单的字符串替换,不作正确性检测。

alt text

        -- #define的弊端:

alt text

alt text

alt text

        -- 只有a被定义为指针类型,b是int类型。这是因为宏定义只是简单的替换,很容易再使用的时候出现错误,如放在式子中优先级的问题之类。

        c.类型重定义         -- typedef

        -- typedef是关键字,在编译时处理,有类型检测的功能,它在自己的作用域内给一个数据类型取一个新的名字。typedef主要用来定义数组、指针、结构体等类型。

alt text

2、初始化

        a. 在定义变量的同时进行初始化                 --{}

alt text

alt text

注:按顺序部分初始化可以,不按顺序不行。要想不按顺序,需要用"."进行运算。

        b. 先定义变量,再进行初始化
                -- 变量名.成员变量名         -- 只能在函数内部进行"."运算,在函数外不行。

alt text

!!!注:

        在对字符串数组进行赋值时,如果是在定义时初始化,可以直接用字符串常量进行赋值。只有在定义时同时初始化才可以直接="字符串";char a[10]="";省略大括号{}。

        但是先定义,后对a[]="字符串"赋值不行,只能用字符串常用函数复制过来,只要时先定义,后面再赋值的,只能通过复制,如果数组的内容是整形,就要一个一个赋值。

alt text

3、应用 --输入输出

        a. 结构体                 -- 结构体变量.成员变量 =》就是成员变量的空间

alt text

        b. 结构体数组         -- 数组元素是结构体         -- stu[i].id

alt text

        c. 结构体指针         -- 结构体指针->成员变量 =》是成员变量的空间

alt text

补充:

alt text

alt text

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/924481
推荐阅读
相关标签
  

闽ICP备14008679号