首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言结构体、联合与枚举类型

于是C语言就定义了一个不同类型数据的集合的数据结构 ————结构体。...准确来说,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。...4.typedef 与结构体 struct + 结构体名称这种写法有时候会不会太过冗长了呢,C语言提供了一个很好的解决这种冗长代码的关键字 ,typedef 关键字可以将类型进行重命名...这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。...等等,其实啊枚举的应用非常的广泛,我们在用C语言写的中型大型项目里面常常会用到枚举类型,比如在写植物大战僵尸的游戏,现在要求你把植物卡槽写满,你该怎么办,难道用1代表这个植物2代表那个植物?

11810

【C语言】数组&&结构体&&枚举&联合详解

unsigned long [int] signed long [int] //unsigned 无符号的 //signed 有符号的 char是否有signed char C语言标准并没有规定...但是在C语言中除了8 bit的char之外,还有16 bit的short型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节...; }; int main() { struct Stu s = { "张三",20 }; return 0; } 结构体也可以嵌套初始化 3.4 结构体内存对齐 我们先看一个例子: 我们计算一下...如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍 对齐数=编译器默认的一个对齐数 与 该成员大小的较小值 vs中默认的值为...8 Linux中没有默认对齐数,对齐数就是成员自身的大小 下面这篇文章详细的解释了结构体内存对齐规则 C语言--结构体内存对齐规则_结构体对齐原则-CSDN博客 3.4.2 为什么要对齐 大部分的参考资料都是这样解释的

16210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言知识总结——宏,枚举,结构体,共用体

    1、define宏定义 以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。...虽然枚举类型可以当类型使用,但是实际上并不常用,但是如果是有意是排比名字,用枚举比宏定义方便,枚举比用好些,因为枚举有int类型,在C 语言中,枚举类型是被当做 int 或者 unsigned int...在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。结构体可以存储不同的数据类型,将他们互相联系起来。...联合体) 在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。...这种几个不同的变量共同占用一段内存的结构,在C语言中 以关键字union声明的一种数据结构,这种被称作“共用体”类型结构,也叫联合体。 “联合”与“结构”有一些相似之处。但两者有本质上的不同。

    2.4K40

    C语言-枚举、共用体

    共用体 前面章节学习了结构体,结构体里可以按顺序存放相同或者不同的数据类型,每个成员都有它对应的存储空间。...而共用体和结构体一样也可以按顺序存放相同或者不同数据类型,但是与结构体的区别是,共用体所有成员共用一个存储空间,存储空间由成员中存储空间最大的来决定。...结构体定义示例: struct app { int a; char b; }; 结构体:每个成员是占用独立的空间,结构体成员之间会因为内存对齐产生间隙。...共用体的语法和使用方法(定义、成员变量的访问形式等等)与结构体一样。...枚举 C语言的枚举可以给一串有序的数字集合定义名字,特别是数量较多的整数需要定义名字时,比#define更加方便。

    82520

    江哥带你玩转C语言 | 14 - 结构体-枚举-共用体

    显然这组数据不能用数组来存放, 为了解决这个问题,C语言中给出了另一种构造数据类型——“结构(structure)”或叫“结构体”。...---- 定义结构体类型 在使用结构体之前必须先定义结构体类型, 因为C语言不知道你的结构体中需要存储哪些类型数据, 我们必须通过定义结构体类型来告诉C语言, 我们的结构体中需要存储哪些类型的数据 格式...注意: 结构体不可以嵌套自己变量,可以嵌套指向自己这种类型的指针 struct Student { int age; struct Student stu; }; 对嵌套结构体成员的访问...C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。...C语言编译器会将枚举元素(spring、summer等)作为整型常量处理,称为枚举常量。

    77700

    C语言-----自定义类型-----结构体&枚举&联合

    结构体和数组一样,都是一群数据的集合,不同的是数组当中的数据是相同的类型,但是结构体中的数据类型可以不相同,结构体里的成员叫做成员变量 结构体类型是C语言里面的一种自定义类型,我们前面已经了解到过int...Node* 5.结构体的大小--内存对齐现象 (1)结构体的第一个成员对齐到结构体变量起始偏移量是0的地方 (2)对齐数是编译器的默认对齐数8和结构体成员变量的较小值 (3)结构体的总大小是最大对齐数的整数倍...,最大对齐数是所有成员对齐数的最大值 (4)结构体嵌套结构体的时候,嵌套的结构体成员对齐到自己成员最大对齐数的整数倍,整个结 构体的大小就是所有结构体成员最大对齐数的整数倍(把内置的嵌套结构体也当作一个结构体成...员); (5)根据结构体的对齐规则,我们应该尽量让小的结构体成员放在一起,大的结构体成员放在一 起,这样就可以节省时间和空间; 6.结构体实现位段功能 (1)位段中的位是指二进制位,一个二进制位是一个比特...; 8.枚举 枚举就是把可能的值一一列举,比如一周有7天 枚举类型的使用,当然,我们在使用的时候可以给枚举常量赋值; 9.联合体(共用体) 联合体的成员共同使用一块内存空间,一起使用的时候会影响彼此的数值

    7710

    C语言进阶—自定义类型:结构体,枚举,联合

    1.结构体 1.结构体类型的声明 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。...} 特殊的声明 ,在声明结构的时候,可以不完全的声明,称为匿名结构体;例如:下面的两个结构2在声明的时候省略掉了结构体标签(tag)。...//匿名结构体类型 struct { int a; char b; float c; }x; struct { int a; char b; float c; }a[20], *p; 在上面代码的基础上...4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能 的下降。 结论: 结构体传参的时候,要传结构体的地址。

    9310

    C# 结构体(Struct)、 枚举(Enum)

    C# 结构体(Struct) 在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。 结构体是用来代表一个记录。...您可能想跟踪每本书的以下属性: 定义结构体 为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。...在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点: 结构可带有方法、字段、索引、属性、运算符方法和事件。 结构可定义构造函数,但不能定义析构函数。...枚举(Enum) 枚举是一组命名整型常量。...枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。

    1K10

    C语言_结构体

    一、结构体 结构的基础知识 结构是一些值的集合,这些值称为成员变量,结构的每个成员可以是不同类型的变量。...数组: 一组相同类型元素的集合; 结构体:其实是一组不一定相同类型元素的集合; 复杂对象,不能通过内置类型直接描述和表示,就用结构体来描述复杂类型。...结构体初始化 ---- ---- 四.结构成员的类型 结构成员可以使标量、数组、指针、甚至是其它结构体 五.结构体变量的定义和初始化 有了结构体类型,如何定义变量 ---- ---- 六.结构体成员访问...---- 6.2结构体指针访问指向变量的成员(箭头操作符 ->) 有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销过大,所以会导致性能的下降。 结论:结构体传参的时候,要传结构体的地址。

    13720

    C语言结构体

    结构体类型的声明 1.1 结构体回顾 结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。...1.2 结构的特殊声明 有一种结构体叫做匿名结构体,这种结构体只能使用一次,匿名结构体没有结构体标签 struct { int a; char b; float c; }x; struct {...4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。 2.2 为什么存在内存对⻬?...那在设计结构体的时候,我们既要满⾜对⻬,⼜要节省空间,如何做到: //例如: struct S1 { char c1; int i; char c2; }; struct S2 { char c1...结构体实现位段 4.1 什么是位段 1. 位段的成员必须是 int、unsigned int 或signed int ,在C99中位段成员的类型也可以 选择其他类型。 2.

    5710

    C语言结构体

    结构体         结构体的声明 struct TAG { //member_list;//结构体内部成员 }/*variable*/;//结构体的名字,或者指针在这里         例如 struct...(tag)         那么这两个声明是无法识别类型的,只知道是结构体但是无法识别类别,那么就不可以 p = &B;         结构体的自引用 struct Node { int number...重点 结构体内存对齐         ⾸先得掌握结构体的对⻬规则:                 1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处                 ...4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整                      数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数的整                     ...而我们设计结构体是,让占用空间小的成员尽量集中在一起.

    8910

    【C语言】结构体

    前言 还记得我在总结操作符时,涉及到了结构体,在C语言中类型分为两大类一个是内置类型,一个是自定义类型,常见的内置类型我们不说,我们今天来好好看一看为自定义类型之一的结构体吧 个人主页:小张同学zkf...但有一些特殊情况,让我们来看一下 // 匿名结构体类型 struct { int a; char b; float c; }x; struct...{ int a; char b; float c; }a[ 20 ], *p; 这种就是匿名结构体类型,你会发现这个结构体类型没有名字,那么可以...如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。...结束语 结构体知识就总结到这里了,下篇博客我们来看看同为自定义类型家族的联合体和枚举 OK,感谢观看!!!

    12310

    C语言——结构体

    让我们走进结构体 一.结构体 1.1 什么是结构体 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。...1.2 结构体的声明 例如用结构体描述一个学生 1.3 特殊的声明 在声明结构体时,可以不完全声明,也就是匿名结构体类型 1.4 结构的自引用 结构的自引用就是自己作为自己的成员变量 但是要注意正确的引用方法...结构体变量的嵌套初始化 1.6 结构体内存对齐 来计算一下结构体的大小 来计算一下结构体的大小如果不了解的话可能会觉得是 6 6 13 为什么最终结果会是这样呢?...这就要掌握首先得掌握结构体的对其原则 1.6.1结构体的对其原则 一. 二.结构体嵌套问题 为什么存在内存对齐?...如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 因此结构体传参的时候,要传结构体的地址。

    8210

    C语言——结构体

    一.结构体 在C语言中,有许多的内置类型,如char、int、double等等,但仅仅有这些类型是远远不够的。 假如要描述一个学生,那么他的名字、身高、体重、成绩等等都需要考虑。...为此,C语言提供了结构体这样的自定义类型。结构体的每个成员可以是不同类型的变量。...; //声明类型的同时定义变量s1 struct S2 { int num; struct S1 s1; struct Stu* p; }s2 = { 3,{3,4},NULL }; //结构体嵌套初始化...4.如果是嵌套结构体的情况,嵌套的结构体成员对齐到自身成员的最大对齐数的整数倍处,结构体的总大小是最大对齐数(比较对象包含嵌套结构体中成员的对齐数)的整数倍。...例子2(嵌套结构体): 存在结构体内存对齐的原因: 1.

    12710

    【C语言】结构体

    前言 在C语言中,有两种类型,一种是内置类型,可以直接使用,包括char short int long long long float double;一种是自定义类型,当内置类型不能满足时,支持自定义一些类型...,像结构体、枚举、联合体。...如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。...总的共用了9个 最后因为结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍,这里最大的为4,所以最后结构体的大小就是12 对于嵌套 struct S3...但对于s4而言:它嵌套了s3,它有一个规定 :如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。

    16910
    领券