首页 > 编程语言 > 详细

C语言中的结构体及共用体

时间:2021-07-07 10:15:47      阅读:15      评论:0      收藏:0      [点我收藏+]

C语言中的结构体、共用体以及枚举类型

一、结构体

1、概述

  为什么需要结构体?

    在实际问题中,一组数据可能包含多种数据类型,比如描述一名学生时,需要用char类型的姓名,char或者int数据类型的学号,float类型的分数,等等,

  结构体可以有效的解决这类问题。

  实质

    结构体本质上还是一种数据类型,它包含若干个“成员”,每个成员可以是不同数据类型的,基本数据类型或者构造数据类型。结构体有利于程序的阅读

  理解和移植,而且结构体的存储方式可以提高CPU对内存的访问速度。

  定义结构体的一般形式:

    struct 结构名

    {

      成员列表

    };

    成员列表由若干个成员组成,都是该结构体的组成部分,对于每个成员都需要进行类型说明,其形式为:类型说明符 成员名

2、定义结构体变量

  (1)先声明结构体类型再定义变量名

    struct student student1,student2;

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

    这种形式的定义的一般形式为:

    struct 结构体名
    {

      成员列表

    }变量名表列;

  (3)直接定义结构体类型变量

    一般形式为

    struct

    {

      成员表列

    }变量名表列;

    //结构体名是可有可无的

3、结构体变量的引用

  ##注意:

    (1)不能将一个结构体变量作为一个整体进行输入输出。

    (2)如果成员本身也是一个结构体类型,则需要使用成员运算符一级一级地找到最低一级的成员。

    (3)结构体变量的成员一样可以像普通变量进行各种运算。

  引用结构体变量中的成员的方式为:

    结构体变量名.成员名

  由上面形式可以直接对结构体变量中的成员进行赋值。

4、结构体变量的初始化

  struct 结构体名

  {

    成员表列

  }结构体变量1,结构体变量2 = {...};

  结构体变量1 = {... };

5、结构体数组

  概念:即数组的每个元素都是结构体类型。

  struct 结构体名

  {

    成员表列
  }数组名[];

  或者struct 结构体名 数组名[] ;

  初始化:数组名[]  = { ...};

 

6、指向结构体类型数据的指针

  概念:结构体变量的指针就是该结构体变量所占据的内存段的起始地址。

  结构指针变量说明形式一般为:

    struct 结构名 *指针变量名;

    指针变量名 = & 结构体变量名  // 指针变量赋值

  将一个结构体变量的值传递给另一个函数:

  (1)用结构体便变量的成员作参数

  (2)用结构体变量作实参

  (3)用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址给形参。

7、用指针处理链表

二、共用体

  概念:使几个不同的变量共同占用一段内存的结构称为“共用体”类型的结构。

  区别:结构体的各个成员占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。

     结构体占用的内存大于等于所有成员占有内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存,

     共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来的成员的值覆盖掉。

  定义共用体类型变量的一般形式:

    union 共用体名

    {

      成员表列

    }变量表列;  

  共用体首先定义了共用体变量才能引用它,而且不能引用共用体变量,而只能引用共用体变量中的成员。

  共用体类型数据的特点

    同一个内存段可以用来存放几种不同类型的成员,但在一瞬时只能存放其中一种,而不是同时存放几种。 

    共同体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。

    不能对共用体变量名赋值,也不能引用变量名来得到一个值,也不能在定义共用体变量时对它初始化 

    不能把共用体变量作为函数参数,也不能使函数返回共用体变量,但是可以使用指向共用体变量的指针

    共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组也可以作为共用体的成员。

 

三、枚举类型

  推荐学习:

   枚举类型enum详解——C语言 - 蓝海人 - 博客园 (cnblogs.com)

 

C语言中的结构体及共用体

原文:https://www.cnblogs.com/1013a/p/14979652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!