C语言结构体与共用体讲解
c语言结构体共用体数据类型求大小例题

c语言结构体共用体数据类型求大小例题(原创版)目录一、C 语言结构体和共用体的概念二、结构体和共用体的大小计算方法三、例题解析四、总结正文一、C 语言结构体和共用体的概念C 语言中,结构体和共用体是两种特殊的数据类型,它们都可以用来描述一个复合数据类型。
结构体和共用体的主要区别在于它们存储数据的方式不同。
结构体是一种复合数据类型,它可以包含多个不同类型的成员变量。
结构体中的成员变量按照定义的顺序排列,并且每个成员变量都有一个唯一的名字。
结构体可以看作是一个数据容器,它可以存储多个相关类型的数据。
共用体是一种特殊的结构体,它的每个成员变量都共享同一段内存空间。
共用体的每个成员变量都有一个基地址,它们之间的关系是连续的。
共用体的大小等于其最大成员变量的大小。
二、结构体和共用体的大小计算方法结构体和共用体的大小计算方法相同,都是按照定义的顺序依次计算每个成员变量的大小,并累加得到总体大小。
需要注意的是,结构体和共用体的大小通常会进行对齐处理,以提高数据访问的效率。
三、例题解析假设有一个结构体如下:```cstruct example {int a;char b;float c;};```首先,我们需要知道每个成员变量的大小。
在 32 位系统下,int 类型占用 4 个字节,char 类型占用 1 个字节,float 类型占用 4 个字节。
因此,结构体 example 的大小为:```size = 4(int a 的大小) + 1(char b 的大小) + 4(float c 的大小)= 9```接下来,我们需要考虑对齐问题。
在 32 位系统下,数据对齐的粒度是 4 个字节。
因此,结构体 example 的大小应该为 4 的倍数。
由于 9 不是 4 的倍数,所以需要进行对齐处理。
将结构体 example 的大小调整为 12,这样每个成员变量都可以从 4 的倍数地址开始存储。
```size = 12```因此,结构体 example 的大小为 12 字节。
C语言程序设计-第11章 结构体与共用体

2.说明: (1)结构体类型与结构体变量是两个不同的概念, 其区别如同int类型与int型变量的区别一样。 (2)结构体类型中的成员名,可以与程序中的变 量同名,它们代表不同的对象,互不干扰。 (3)“结构体类型名”和“数据项”的命名规则, 与变量名相同。
(4)数据类型相同的数据项,既可逐个、 逐行分别定义,也可合并成一行定义。 例如,本案例中的日期结构类型,也可改为如下形 式: struct date {int year, month, day; }; (5)结构体类型中的数据项,既可以是基本数据类 型,也允许是另一个已经定义的结构体类型。 例如,结构体类型std_info,其数据项“birthday” 就是一个已经定义的日期结构类型date。 (6)本书将1个数据项称为结构体类型的1个成员 (或分量)。
例如:
struct student {int num; . . . }; struct student stu[ ]={{…},{…},{…}}; 以上即声明结构体类型,然后定义数组为该结构体类 型,在定义数组时初始化。
11.5.3 结构体数组应用举例
例 11.2 对候选人得票的统计程序。 #include <string.h> struct piao {char name[20]; int count; }leader[3]={“Li”,0,”Zhang”,0,”Fun”,0}; main() {int i,j; char leader_name[20]; for(i=1;i<=6;i++) {scanf(“%s”,leader_name);
C语言提供了将不同类型的数据组合成一个 有机的整体,以便引用。例如,一个学生 的学 号、姓名、性别、年龄、成绩、家庭 地址等项。这些项都与该学生相联系。 在一个组合项中包含有若干个类型不同的数 据项,这样一种数据结构称为结构体。它相 当于其他高级语言中的“记录”。 见下图: num name sex age score addr 10010 Li Fun M 18 87.5 Beijing
浅谈C语言共用体和与结构体的区别

浅谈C语⾔共⽤体和与结构体的区别
共⽤体与结构体的区别
共⽤体:
使⽤union 关键字
共⽤体内存长度是内部最长的数据类型的长度。
共⽤体的地址和内部各成员变量的地址都是同⼀个地址
结构体⼤⼩:
结构体内部的成员,⼤⼩等于最后⼀个成员的偏移量+最后⼀个成员⼤⼩+末尾的填充字节数。
结构体的偏移量:某⼀个成员的实际地址和结构体⾸地址之间的距离。
结构体字节对齐:每个成员相对于结构体⾸地址的偏移量都得是当前成员所占内存⼤⼩的整数倍,如果不是会在成员前⾯加填充字节。
结构体的⼤⼩是内部最宽的成员的整数倍。
共⽤体
#include <stdio.h>
//gcc让不同类型的变量共享内存地址 ,同⼀时间只有⼀个成员有效
union data{
int a;
char b;
int c;
};
int main(){
union data data_1 = {1};//初始化时只填写⼀个值。
(同⼀时间只有⼀个成员有效)
data_1.b = 'c';
data_1.a = 10;//后赋值的才有效。
前⾯的赋值被覆盖
//打印地址,发现指向同⼀个地址
printf("%p\n%p\n%p\n",&data_1.a,&data_1.a,&data_1.a);
return 0;
}
以上这篇浅谈C语⾔共⽤体和与结构体的区别就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
C语言教程之结构体共用体与位运算

C语言教程之结构体共用体与位运算C语言是一种功能强大的编程语言,它提供了许多用于处理复杂数据类型的特性。
其中,结构体、共用体和位运算是三个重要的特性,可以帮助开发者更高效地处理数据。
本教程将介绍C语言中的结构体、共用体和位运算,并给出一些实例和使用场景。
1. 结构体(Structures)结构体是C语言中一种用户自定义的数据类型,可以将不同类型的数据组合在一起,形成一个新的复合数据类型。
结构体通过关键字"struct"来定义,可以在其中定义多个成员变量,并且可以根据需要为每个成员变量指定不同的数据类型。
例如,我们可以定义一个结构体来表示一个学生的信息:```struct studentchar name[20];int age;float grade;};```上面的代码定义了一个名为`student`的结构体,包含了三个成员变量:`name`,`age`和`grade`,分别表示学生的姓名、年龄和成绩。
使用结构体时,可以通过`.`操作符来访问结构体的成员变量,就像访问一个普通的变量一样。
例如,我们可以通过以下方式给结构体的成员变量赋值:```struct student stu1;strcpy(, "John");stu1.age = 18;stu1.grade = 90.5;```2. 共用体(Unions)共用体是C语言中一种特殊的数据类型,它和结构体类似,也可以包含多个成员变量,不同之处在于,共用体的成员变量共享同一块内存空间。
即,共用体的所有成员变量在内存中的起始地址是相同的,它们共同占用一段连续的内存空间。
共用体的定义方式与结构体类似,只是将关键字"struct"换成了"union"。
例如,我们可以定义一个共用体来表示一个变量的多种不同数据类型的解释:```union dataint i;float f;char str[20];};```上面的代码定义了一个名为`data`的共用体,包含了三个成员变量:`i`,`f`和`str`,分别表示整数、浮点数和字符数组。
C语言结构体与共同体

C语言结构体与共同体C语言中结构体和共同体是两种用于组织和管理数据的重要概念。
它们可以帮助程序员更有效地管理和操作数据,提高程序的可读性和可维护性。
一、结构体(Structures)结构体是一种由不同类型的数据成员组成的数据类型,它允许程序员将不同类型的数据组织在一起并使用一个名称来引用它们。
结构体可以包含各种数据类型,例如整数、字符、数组或甚至其他结构体。
结构体的定义通过使用关键字struct来实现。
例如,下面的代码定义了一个名为Person的结构体,其中包含姓名、年龄和性别这三个成员:```cstruct Personchar name[50];int age;char gender[10];};```结构体定义可以在程序的任何地方,通常在函数外部定义,使得它在整个程序中都可见。
结构体的创建和初始化可以使用以下格式:```cstruct Person p1; // 创建名为p1的结构体变量struct Person p2 = {"John", 25, "Male"}; // 创建名为p2的结构体变量并初始化其成员```结构体成员可以通过`.`操作符来访问,例如:```cprintf("Name: %s\n", );```结构体可以作为函数的参数传递,也可以作为函数的返回值。
通过传递结构体作为参数,可以避免传递多个参数,提供了一种有效地传递多个相关数据的方法。
例如,下面的代码演示了一个函数,该函数接受一个名为p的Person结构体作为参数,并打印出其成员的值:```cvoid printPerson(struct Person p)printf("Name: %s\n", );printf("Age: %d\n", p.age);printf("Gender: %s\n", p.gender);```二、共同体(Unions)共同体是一种特殊类型的结构体,它允许不同类型的成员共享同一块内存空间。
C语言中的结构体和共用体(联合体)

C语言中的结构体和共用体(联合体)/c-pointer-array/在C 语言中,结构体(struct)是一个或多个变量的集合,这些变量可能为不同的类型,为了处理的方便而将这些变量组织在一个名字之下。
由于结构体将一组相关变量看作一个单元而不是各自独立的实体,因此结构体有助于组织复杂的数据,特别是在大型的程序中。
共用体(union),也称为联合体,是用于(在不同时刻)保存不同类型和长度的变量,它提供了一种方式,以在单块存储区中管理不同类型的数据。
今天,我们来介绍一下C 语言中结构体和共用体的相关概念和使用。
结构体 / struct结构体的定义声明一个结构体类型的一般形式为:struct 结构体名 {成员列表};其中,成员列表中对各成员都应进行类型声明,即:类型名成员名;例如,我们需要在程序中记录一个学生(student)的数据,包括学号(num)、姓名(name)、性别(sex)、年龄(age)、成绩(score)、地址(addr)等,如下图所示:如果要表示图中的数据结构,但C 语言并没有提供这种现成的数据类型,因此我们需要用定义一种结构体类型来表示。
truct student {int num;char name[20];char sex;int age;float score;char addr[30];};上述定义了一个新的结构体类型 struct student(注意,struct 是声明结构体类型时所必须使用的关键及,不能省略),它向编译系统声明,这是一个“结构体类型”,它包括 num、name、sex、age、score、addr 等不同类型的数据项。
应当说,这里的 struct student 是一个类型名,它与系统提供的标准类型(如 int、char、float、double 等)具有同样的作用,都可以用来定义变量的类型。
结构体变量前面只是声明了一个结构体类型,它相当于一个模型,但其中并无具体的数据,编译系统对其也不分配实际的内存单元。
C语言编程:第十一章结构体与共用体

10010 Li Fun M 18 87.5 Bejing
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
11.3 结构体变量的引用
结构体变量的引用应该遵循以下原则 • 1)不能将一个结构体变量作为一个整体进行输入和
2)结构体名同标识 符命名规则;
3)分号不能省略
4)成员列表又称“域表”,每个成员也称为域。
5)指定一个结构体类型相当于指定了一个模型,它无 数据,系统对其不分配实际内存单元。
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
struct { int num;
char name[10]; char sex;
int age; float score; char addr[30]; } student1,student2;
(3)
Zhang Sumin (South China Agriculture University Computer Department ,Guangzhou 510640) zsmhome@
C语言中的结构体及共用体

C语⾔中的结构体及共⽤体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、指向结构体类型数据的指针 概念:结构体变量的指针就是该结构体变量所占据的内存段的起始地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
num
name
birthday month day year
§五、结构体变量的初始化
形式1: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据}; 形式2: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
形式3: struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};
例 #include <stdio.h> void main( ) { struct student { int num; char name[16]; char sex; struct {int year;int month;int day;}birth; float score; }stu1={12,“Wang Lin”,„M‟,{1988,5,30},97}; printf(“%d,%s,%c,%d-%d-%d,%5.2f\n”, stu1.num,,stu1.sex, stu1.birth.year,stu1.birth.month,stu1.birth.day, stu1.score); }
第11章 结构体与共用体
一、结构体的概念及使用 二、结构体变量、数组和指针 三、链表的概念及基本操作 四、11.8 共用体 11.9 枚举类型 11.10 用typedef定义类型
本章要点 §结构体的概念
自己 阅读
§结构体的定义和引用
§结构体数组
C语言程序设计
第一章 C语言概述
短整型short
整 型 数值类型 基本类型 字符类型char 浮点型 整型int 长整型long 单精度型float 双精度型double
数组
C 数 据 类 型 结构体struct 构造类型 共用体union
枚举类型ቤተ መጻሕፍቲ ባይዱnum
指针类型 空类型void
<
定义类型typedef
在基本 类型基 础上自 己定义 的
第11章 结构体与共用体
§一、概述(结构体类型的声明)
结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体 -------自定义数据类型 结构体类型定义
stu1.num=10;
stu1.score=85.5; stu1.score+=stu2.score; stu1.age++;
例 struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };
结构体类型定义描述结构 的组织形式,不分配内存
§二、定义结构体类型变量的方法
1、先声明结构体类型,再定义结构体变量
num
name
birthday month day year
§ 四、 结构体变量的引用 引用规则、引用方式、赋值或存储运算、算术运算、引用成员地址 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; stu1.birthday.month=12;
三、说明
结构体类型与结构体变量概念不同 类型:不分配内存;变量:分配内存 成员可单独使用,相当于使用一般变量 结构体可嵌套。成员也可以是一个结构体变量 结构体成员名与程序中的变量名可相同,不会混淆 例 struct date { int month; int day; int year; }; struct student { int num; char name[20]; struct date birthday; }stu;
一般形式:
struct 结构体名 num { 类型标识符 成员名; name 类型标识符 成员名; ……………. sex 例 }; age struct student struct 结构体名 变量名表列; stu1 2字节
…
20字节 1字节 2字节 4字节
{ int num; char name[20]; char sex; 定义结构体变 int age; 量之后为其分 float score; 配内存单元 char addr[30]; }; struct student stu1,stu2;
§六、结构体数组
结构体数组的定义
三种形式: 形式一: 形式三: 形式二: struct student struct student { int num; { int num; char name[20]; char name[20]; char sex; char sex; int age; int age; }; }stu[30]; struct student stu[30];
struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };
合法标识符 可省:无名结构体 成员类型可以是 基本型或构造型
struct是关键字, 不能省略
分号不能省略
例如:要想把学生基本情况作为一个整体加以处理, 包括学号、姓名、性别、年龄、成绩、住址等,定义结构体类型
num
25B
name sex age num
name sex age
score
…..
addr
30字节
2、声明结构体类型的同时定义结构体变量
一般形式: struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;