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

一万六千字详解C语言struct 结构union 共用

struct 结构 struct即结构C程序中经常需要用相关的不同类型的数据来描述一个数据对象。...在实际应用中,C语言结构数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。结构可以存储不同的数据类型,将他们互相联系起来。...这种几个不同的变量共同占用一段内存的结构,在C语言中 以关键字union声明的一种数据结构,这种被称作“共用”类型结构,也叫联合体。 “联合”与“结构”有一些相似之处。...共用的访问: 共用访问成员的值时一般使用.运算符,指针时用->运算符(和结构是一样的) typedef union _node { int a; double b; char c;...补充: 还有一个是无名联合体,它是和无名结构的工作原理是相同的 #include//简单的例子 #include typedef union _node{

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

    C自定义类型详解】——结构(struct)、位段、枚举(enum)、联合(union)

    ) 3、 联合(union) 1、结构(struct) 1.0 结构类型的声明 我们通常会用一个变量来定义一个事物,就比如我们要进行求和,我们通常会创建一个sum的变量来存放求和的结果,最终再打印sum...在C语言中也是如此,对于一个复杂对象,C语言提供了结构,就拿上面的学生例子来说,对于这么一个复杂对象的描述,C语言是这样实现的。...对于结构不完全声明,假如有以下这种情况: #include struct { int a; char b; float c; }x;//在声明结构时,我们可以顺便创建结构变量...VS:默认的值为8 linux:不设默认对齐数,即结构成员的大小就是它本身的对齐数 3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。 4....,如下: #include union Un { int i; char c; }; int main() { union Un un; printf("%d", sizeof

    1.3K20

    C 语言】结构 ( 结构浅拷贝 )

    文章目录 一、结构浅拷贝与深拷贝 二、结构浅拷贝 三、结构浅拷贝代码示例 一、结构浅拷贝与深拷贝 ---- 结构 中 嵌套了 指针 , 指针指向的内存 , 如果需要 malloc 在堆内存中...拷贝 指针变量的值 , 不会拷贝 指针变量 指向的 内存空间的 数据 ; 二、结构浅拷贝 ---- 结构浅拷贝 : 下面两种方式的拷贝 , 是结构的浅拷贝 ; 直接拷贝结构体内存 : //...结构体内存拷贝 // 该拷贝是浅拷贝 memcpy(to, from, sizeof (Student)); 使用 = 操作拷贝 : 只会将 结构 变量的 内存 , 从 from 指针指向的地址..., 拷贝到 to 指针指向的地址 ; // 结构直接赋值 , 与上面的代码作用相同 // 该拷贝也是浅拷贝 *to = *from; 三、结构浅拷贝代码示例 ---- 代码示例...数据类型 , 同时为该结构类型声明 别名 * 可以直接使用 别名 结构变量名 声明结构类型变量 * 不需要在前面添加 struct 关键字 */ typedef struct Student

    3K20

    C语言】结构

    前言 还记得我在总结操作符时,涉及到了结构,在C语言中类型分为两大类一个是内置类型,一个是自定义类型,常见的内置类型我们不说,我们今天来好好看一看为自定义类型之一的结构吧 个人主页:小张同学zkf...但有一些特殊情况,让我们来看一下 // 匿名结构类型 struct { int a; char b; float c; }x; struct...{ int a; char b; float c; }a[ 20 ], *p; 这种就是匿名结构类型,你会发现这个结构类型没有名字,那么可以...- VS 中默认的值为 8 - Linux中 gcc 没有默认对齐数,对齐数就是成员自身的大小 3....如果传递一个结构对象的时候,结构过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 结论: 结构传参的时候,要传结构的地址。

    11610

    C语言——结构

    让我们走进结构 一.结构 1.1 什么是结构 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。...1.2 结构的声明 例如用结构描述一个学生 1.3 特殊的声明 在声明结构时,可以不完全声明,也就是匿名结构类型 1.4 结构的自引用 结构的自引用就是自己作为自己的成员变量 但是要注意正确的引用方法...如果这样引用结构的大小将会是无穷大 所以我们引入指针 这样才能达到自引用的目的 1.5 结构变量的定义和初始化 1.5.1 结构变量的定义 1.5.2 结构变量的初始化 1.5.3...这就要掌握首先得掌握结构的对其原则 1.6.1结构的对其原则 一. 二.结构嵌套问题 为什么存在内存对齐?...如果传递一个结构对象的时候,结构过大,参数压栈的的系统开销比较大,所以会导致性能的下降。 因此结构传参的时候,要传结构的地址。

    7510

    C语言_结构

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

    13420

    C语言结构

    结构         结构的声明 struct TAG { //member_list;//结构体内部成员 }/*variable*/;//结构的名字,或者指针在这里         例如 struct...重点 结构体内存对齐         ⾸先得掌握结构的对⻬规则:                 1.结构的第⼀个成员对⻬到和结构变量起始位置偏移量为0的地址处                 ...对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值,在VS2022中 默认是8                 Linux 和 gcc中没有默认设定参数,对其书加上成员自身的大小                ...4.如果嵌套了结构的情况,嵌套的结构成员对⻬到⾃⼰的成员中最⼤对⻬数的整                      数倍处,结构的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构中成员的对⻬数的整                     ...而我们设计结构是,让占用空间小的成员尽量集中在一起.

    7910

    C++一分钟之-结构与联合体(Union)

    C++编程的世界里,结构(struct)和联合体(union)是两种基本的数据结构,它们各自有着独特的特性和应用场景。...结构(struct)基本概念结构允许你组合不同的数据类型在一个单一的复合类型中。每个成员变量在内存中占据独立的空间,结构的大小是其所有成员变量所占空间之和。...常见问题与避免内存对齐:编译器为了提高访问效率,会对结构成员进行内存对齐,这可能导致结构实际占用的内存大于各成员占用内存的总和。...代码示例union Data { int i; char c; double d;};int main() { Data data; data.i = 10; cout...小结结构和联合体都是C++中处理复杂数据结构的有效工具,但它们的设计哲学和适用场景大相径庭。理解它们的内存模型、特性以及潜在的陷阱,对于编写高效、可靠的代码至关重要。

    87210

    c语言之共用union、枚举、大小端模式

    一、共用union: 1、什么是共用union?...这个共用,估计大家平时在代码也比较少见,我去看了一下stm32的例程里面没怎么看到这个用法(下面的示例分享是在stm32里面找的);其实这个共用union(也叫联合体)跟我们上次分享的结构定义是非常像的...就像下面两个例子一样,把许多类型联合在一起(不过虽然形式上类似,但是具体用法还是有区别的,下面会讲他们之间的区别): union st{ int a; char b; }; 2、共用结构的区别...: 结构类似于一个包裹,结构中的成员彼此是独立存在的,分布在内存的不同单元中,他们只是被打包成一个整体叫做结构而已;共用中的各个成员其实是一的,彼此不独立,他们使用同一个内存单元。...the c is 0x61feac the b is 0x61feac 说明: 通过上面的代码示例,读者可以发现这个共用的大小,并不是像我们之前结构那样是把每个成员所占内存大小加起来

    78940

    C语言】结构

    大家好,我是泽奀,本篇博客就带大家来(初始)C语言的结构的内容,后面也会发布一篇进阶的内容。...目录 结构基础: typedef作用: 结构的作用: 结构的大小与内存对齐: 结构成员的类型  结构成员  结构(套娃‘doge’) 结构传参和传值  1.传参  2.传址 各位,这两个函数如果要选择一个的话...typedef作用: 想了想,还是把typedef单独拿出来说一说吧 C 语言提供了 typedef 关键字,你可以使用它来为类型取一个新的名字。...看到这里可能有些人会感觉和#deifne怎么感觉一样,那在这里我说下: #define 是 C 指令,用于为各种数据类型定义别名,与 typedef 类似,但是它们有以下几点不同: typedef 仅限于为类型定义符号名称...---- 结构成员的类型 结构成员的类型,可以是变量,数组,指针,甚至是其它的结构,这里就不每个去列举了。 结构成员 结构变量的访问成员,是通过操作符(.)访问的。

    2.2K20

    C语言】结构

    ,如果没有对结构进行重命名的话,仅能使用一次 struct { int a; char b; float c; }x; 形如上面代码的结构未重命名的话,使用这一次便被回收 4...8) ③结构体总大小一定为对齐数的整数倍 ④如果结构中嵌套了结构,嵌套的结构对齐到对齐到自己成员中最大对齐数的整数倍处,结构的整体大小就是所有最大对齐数的整数倍 我们可以将大小看作一个数组...4个字节放入 char c2;//1字节,<8,放在8位置处 }; 又因为现在指向9位置处,9不是最大对齐数4的整数倍,所以要指向12处,所以结构S1的大小为12字节 printf打印一下:...16 }; 因为最大对齐数为8,16为8的整数倍,所以结构S3的大小就是16个字节 struct S4 { char c1;//1字节,放到0位置处 struct S3 s3;//16字节,以8为对齐数...,对齐的内存只需要一次访问,而不对齐的内存需要两次访问 结构的内存对齐是拿空间来换取时间 我们可以将占用内存小的尽量集中在一起来节省空间 struct S1 { char c1; int i;

    7310

    C++结构概述 | 输出结构变量

    C++结构概述 C++提供了许多种基本的数据类型,但是由于程序需要处理的问题往往比较复杂,而且呈多样化,已有的数据类型显得不能满足使用要求。...C++声明一个结构类型的一般形式为:  struct 结构类型名 {成员表列}; 在声明一个结构类型时必须对各成员都进行类型声明, 类型名 成员名; 每一个成员也称为结构中的一个域,成员表列又称为域表...在C语言中,结构的成员只能是数据,C++在此基础上进行了扩充,结构的成员既可以包括数据,又可以包括函数,以适应面向对象的程序设计。 但是由于C++提供了类类型,一般情况下,不使用带函数的结构。...经典案例:C++使用结构变量。...C++结构概述 | 输出结构变量 更多案例可以go公众号:C语言入门到精通

    2.9K88

    C语言】结构

    这次先来看看结构。 2. 结构类型的声明 2.1 结构的概念 结构是⼀些值的集合,这些值称为成员变量。结构里面每个成员可以是不同类型的变量。...VS中默认的值为8 在 Linux中没有默认对齐数,对齐数就是成员自身的大小 结构体总大小为最大对齐数(结构中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍。...对于s1而言:char c1,占一个字节,而VS中默认的值为8,1小,所以选择1,而结构的第⼀个成员对齐到相对结构变量起始位置偏移量为0的地址处。所以c1就占了0。...总的用了8个地址空间 最后最后因为结构体总大小为最大对齐数(结构中每个成员变量都有一个对齐数,所有对齐数中最大的)的整数倍,这里最大的为4,所以就是8 对于s2而言: char c1和s1中的一样...结构实现位段 结构讲完就得讲讲结构实现 位段 的能力 6.1 什么是位段 位段的声明和结构是类似的,有两个不同: 位段的成员必须是 int、unsigned int 或signed int ,在C99

    16210

    c语言之共用union、枚举、大小端模式

    一、共用union: 1、什么是共用union?...这个共用,估计大家平时在代码也比较少见,我去看了一下stm32的例程里面没怎么看到这个用法(下面的示例分享是在stm32里面找的);其实这个共用union(也叫联合体)跟我们上次分享的结构定义是非常像的...2、共用结构的区别: 结构类似于一个包裹,结构中的成员彼此是独立存在的,分布在内存的不同单元中,他们只是被打包成一个整体叫做结构而已;共用中的各个成员其实是一的,彼此不独立,...共用union的存放顺序是所有成员都从低地址开始存放的。...the c is 0x61feac the b is 0x61feac 说明: 通过上面的代码示例,读者可以发现这个共用的大小,并不是像我们之前结构那样是把每个成员所占内存大小加起来

    1.8K20

    C语言结构指针_C语言函数返回结构指针

    文章目录 结构概述 结构指针 动态存储分配 .malloc函数 .calloc函数 .free函数 结构概述 问题定义:有时需要将不同类型的数据组合成一个有机的整体,以便于使用,...应该这样引用: int main() { boy1.num = 01; boy1.sex = 'M'; printf("%d,%c", boy1.num, boy1.sex...); } 对于结构的基础语法说完了,下面来说结构指针 结构指针 一个结构变量的指针就是该结构变量所占据内存段的起始地址。...可以设一个指针变量,用来指向一个结构变量,此时该指针变量的值是结构变量的起始地址。 同时指针变量也可以用来指向结构数组中的元素。...在C语言中不允许动态数组类型。例如:a[n]就是错误的,必须要用一个实际的数字表示数组长度,但是在实际开发中,往往会发生这种情况,即所需要的内存空间取决于实际输入的数据,而无法预先确定。

    3.6K30

    C语言结构字节对齐 | 结构与联合

    a,因其为char类型且是第一个成员,由规则(1)可得如下; 橙色填充为结构成员b,因其为char类型且不是第一个成员,由规则(2)可得如下; 绿色填充为结构成员c,因其为int类型且不是第一个成员...共用结构 共用 #include #include union stu{ char a; short b; int c; };...2.只给a赋值,但是输出c时输出了a的内容。 分析:内存中用左图来表示结构,右图表示共用结构的成员在内存中都有各自的空间,而共用中共用同一块内存。...区别 共用(联合): 使用union 关键字 共用体内存长度是内部最长的数据类型的长度。...c; }; int main(){ union data data_1 = {1};//初始化时只填写一个值。

    2.3K10

    C语言结构结构指针的使用

    C语言结构结构指针的使用 tips:最近要好好学习一下数据结构,所以必不可少的就是c语言的结构结构指针了,所以就整理一下这些基础知识 c语言结构(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合...c语言是一门面向过程的编程语言,而结构的使用在某些层次上跟面向对象有点异曲同工之处了。下面回归正题,学习一下结构以及结构指针的知识。...%c",&st3.num,st3.name,&st3.sex);//对于数组,scanf输入的时候不用"&" 123 结构的变量的访问(输出) printf("%d,%s,%c\n", st1...s %c\n",p->num,p->name,p->sex); 1234 //指针访问 struct student *p;//定义结构指针 p=&st1; printf("%d %s %...c\n", (*p).num, (*p).name, (*p).sex); 1234 看了上面的基础知识是不是觉得比较简单:),下面让我们来分析一下两个特殊的结构指针访问方法:) 1)p

    2.1K10
    领券