iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言结构体,枚举,联合体详解
  • 361
分享到

C语言结构体,枚举,联合体详解

2024-04-02 19:04:59 361人浏览 薄情痞子
摘要

目录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 用结构体声名变量2.4 用typedef 创建新类型

在这里插入图片描述

1.什么是结构体、枚举、联合体

结构体(struct)是由一系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。如下面的student结构体包含三个成员,分别是name、num、age。

枚举(enum)是C语言的一种特殊类型。当我们在编程中遇到定义一些固定长度或范围的数值时,可以考虑使用枚举类型。使用枚举可以让我们的程序可读性更强、看起来更加直观。举个例子,如果我们在编程中需要使用数字06分别表示星期日星期六,程序的可读性就不高,我们需要翻手册或者看程序注释才能知道每个数字具体代表什么意思。如果我们使用枚举呢,基本上不需要看注释或手册就可知晓其大意。

联合体是一种结构。
它的所有成员相对于基地址的偏移量都是0。
此结构空间要大到足够容纳最宽的成员。
其对其方式适合其中所有成员。


// 创建结构体
struct student
{
  char *name;  // 学生名字
  int num;     // 学生学号
  int age;     // 学生年龄
};

2.定义结构体


struct tag{
	成员变量...
}variable;

通常,tag、结构体成员变量、variable这3个部分至少要出现2个

2.1 包含结构体成员变量、variable


struct
{
	char name[100];
	int age;
}s1;//s1相当于对这个结构体声明了一个变量,可以在程序中直接调用

s1相当于声明的全局变量。

2.2 tag、结构体成员变量


struct person
{
	char name[100];
	int age;
};

2.3 用结构体声名变量


struct person p1,p2[5],*p3

2.4 用typedef 创建新类型


typedef struct 
{
	char name[100];
	int age;
} person;

//用新定义的person类型定义变量
person p1,p2[5],*p3

2.5 两个结构体相互包含


struct B;				//需先对结构体B进行声明,不然声明A时编译无法通过
struct A
{
	struct B *partner;
	//other members;
};
struct B
{
	struct A *partner;
	//other members;
};

2.6 结构体变量初始化


#include <stdio.h> 
struct persons {
    char name[100];
    int age;
}person = {"chuhe",18};
int main()
{
    printf("%s,%d", person.name, person.age);
    return 0;
}

2.7 结构体指针


#include <stdio.h> 
typedef struct persons {
    char name[100];    
    int age;
}persons;
int main()
{
    struct persons p = { "chuhe",18 };
    printf("%s,%d\n", p.name, p.age);
    persons* p1 = &p;//定义结构体指针
    printf("%s,%d\n", p1->name, p1->age);
    return 0;
}

3.枚举

3.1 定义方式


enum 枚举名{元素1,元素2};

3.2 为什么用枚举


#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7

例如上式,定义非常麻烦,此时便可以用枚举


enum DAY{MON=1,TUE,WED, THU, FRI, SAT, SUN};

注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推

3.3 枚举变量的定义


enum DAY{MON=1,TUE,WED,THU,FRI};
enum DAY day;
enum DAY{MON=1,TUE,WED,THU,FRI}day;//也可以在定义枚举类型时一起定义
enum{MON=1, TUE, WED, THU, FRI, SAT, SUN}day;//可以省略枚举名称

3.4 实例


#include <stdio.h>
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
int main()
{
    enum DAY day;
    day = WED;
    printf("%d",day);
    return 0;
}

3.5 枚举实际用途


#include <stdio.h>
#include <stdlib.h>
int main(){
    enum color { red=1, green, blue };
    enum  color favorite_color;
    printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
    scanf("%u", &favorite_color);
    switch (favorite_color){
    case red:
        printf("你喜欢的颜色是红色");
        break;
    case green:
        printf("你喜欢的颜色是绿色");
        break;
    case blue:
        printf("你喜欢的颜色是蓝色");
        break;
    default:
        printf("你没有选择你喜欢的颜色");
    }
    return 0;
}

4.联合体

通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(UNIOn),它的定义格式为:


union 共用体名{
    成员列表
};

4.1 与结构体区别

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

4.2 定义


union data{
    int n;
    char ch;
    double f;
};
union data a, b, c;

共用体 data 中,成员 f 占用的内存最多,为 8 个字节,所以 data 类型的变量(也就是 a、b、c)也占用 8 个字节的内存,请看下面的演示:


#include <stdio.h>
union data{
    int n;
    char ch;
    short m;
};
int main(){
    union data a;
    printf("%d, %d\n", sizeof(a), sizeof(union data) );
    a.n = 0x40;
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    a.ch = '9';
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    a.m = 0x2059;
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    a.n = 0x3E25AD54;
    printf("%X, %c, %hX\n", a.n, a.ch, a.m);
    return 0;
}

运行结果:

4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C语言结构体,枚举,联合体详解

本文链接: https://www.lsjlt.com/news/136988.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言结构体,枚举,联合体详解
    目录1.什么是结构体、枚举、联合体2.定义结构体2.1 包含结构体成员变量、variable2.2 tag、结构体成员变量2.3 用结构体声名变量2.4 用typedef 创建新类型...
    99+
    2024-04-02
  • 详解C语言结构体,枚举,联合体的使用
    目录一、匿名结构体二、结构体的自引用1、声明时不要自己引用自己2、结构体重命名时不能使用重命名三、结构体内存对齐规则1、结构体内存计算2、结构体嵌套3、通过调整结构体成员顺序,压缩内...
    99+
    2024-04-02
  • C语言结构体,枚举,联合体如何使用
    本篇内容介绍了“C语言结构体,枚举,联合体如何使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、匿名结构体struct{ &n...
    99+
    2023-07-02
  • C语言自定义类型详解(结构体、枚举、联合体和位段)
    目录前言一、结构体1、结构体类型的声明2、结构体的自引用3、结构体变量的定义和初始化4、结构体内存对齐5、结构体传参二、位段1、位段的定义 2、位段的内存分配3、位段的应用...
    99+
    2024-04-02
  • C语言枚举与联合体深入详解
    目录前言枚举枚举的定义枚举的使用枚举的优点联合(共用体)联合体的定义联合体的特点联合体大小的计算总结前言 在C语言中,有三个自定义类型——结构体,枚举,联合,...
    99+
    2024-04-02
  • C语言自定义类型超详细梳理之结构体枚举联合体
    目录一、什么是结构体1.结构体实现2.匿名结构体类型3.结构体自引用4.结构体的内存对齐5.结构体位段 二、什么是枚举1.枚举类型的定义2.枚举的优点三、联合(共用体)1.什么是联合...
    99+
    2024-04-02
  • C语言自定义数据类型的结构体、枚举和联合详解
    结构体基础知识 首先结构体的出现是因为我们使用C语言的基本类型无法满足我们的需求,比如我们要描述一本书,就需要书名,作者,价格,出版社等等一系列的属性,无疑C语言的基本数据类型无法解...
    99+
    2024-04-02
  • C语言中的自定义类型之结构体与枚举和联合详解
    目录1.结构体1.1结构的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐数1.8结构体传参2.位段2....
    99+
    2024-04-02
  • Android NDK开发(C语言--联合体与枚举)
    目录1.联合体1.1定义共用体1.2共用体占用的内存应足够存储共用体中最大的成员。1.3联合变量任何时刻只有一个变量存在,最后一次赋值有效1.4JNI头文件中的联合体2.枚举1.联合...
    99+
    2024-04-02
  • C语言超详细讲解结构体与联合体的使用
    目录结构体offsetof-宏位段枚举联合体(共用体)结构体 结构体内存对齐问题: 当我们在计算结构体的大小时,我们便需要清楚的知道结构体内存对齐是什么。 存在内存对齐的原因可细分为...
    99+
    2024-04-02
  • C语言中枚举和联合体的示例分析
    这篇文章主要介绍了C语言中枚举和联合体的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。枚举什么是枚举?顾名思义,就是一一列举,把所有的情况,所有的取值,一一列举出来。...
    99+
    2023-06-25
  • C语言深入探究自定义类型之结构体与枚举及联合
    目录1.结构体1.1结构体类型的声明1.2结构的自引用1.3结构体变量的定义和初始化1.4结构体内存对齐1.5结构体传参1.6结构体实现位段(位段的填充&可移植性)2.枚举2...
    99+
    2024-04-02
  • C语言中联合体与共用体和枚举使用语法示例
    目录联合体/共用体-union枚举-enum联合体/共用体-union 声明联合体的语法格式typedef union 联合体名 {数据类型 成员名1;...
    99+
    2022-12-26
    C语言联合体 C语言共用体 C语言枚举
  • 怎么在C语言中自定义结构体和枚举
    这篇文章将为大家详细讲解有关怎么在C语言中自定义结构体和枚举,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使...
    99+
    2023-06-14
  • C语言关于自定义数据类型之枚举和联合体详解
    目录前言枚举枚举类型的定义枚举类型的优点枚举类型的使用枚举中需要注意的点联合体联合体类型的定义联合体的特点联合体的使用联合体存在内存对齐结语前言 在C语言的自定义数据类型中,除了我们...
    99+
    2024-04-02
  • C语言结构体struct详解
    目录结构体的概念结构体类型的声明结构体变量的创建typedef关键字结构体的嵌套结构体变量的初始化结构体成员的访问结构体的传参总结结构体的概念 结构体是由一系列具有相同类型或不同类型...
    99+
    2024-04-02
  • c语言中如何自定义结构体、位段和枚举
    这篇文章主要介绍了c语言中如何自定义结构体、位段和枚举的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇c语言中如何自定义结构体、位段和枚举文章都会有所收获,下面我们一起来看看吧。结构体类型创建:struct St...
    99+
    2023-06-17
  • c语言结构体和联合体的区别是什么
    结构体和联合体在C语言中都是用来存储多个不同类型的数据的数据结构,但它们之间有一些重要的区别: 结构体(struct):结构体中的...
    99+
    2024-03-15
    c语言
  • C语言中枚举与联合体的使用方法(enum union)
    目录enum的定义 enum对比#define宏常量的好处 union的定义 联合体大小的计算 联合体配合算大小端的问题 总结enum的定义 枚举顾名思义就是一一列举,把...
    99+
    2024-04-02
  • C语言之结构体(struct)详解
    目录为什么需要引入结构体struct定义typedef与#define结构体变量初始化及成员访问结构体访问总结为什么需要引入结构体 原有的数据类型不能满足需求,因此才设计了构造类型结...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作