C语言结构体与共用体讲解

合集下载

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章 结构体与共用体

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语言共用体和与结构体的区别

浅谈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语言是一种功能强大的编程语言,它提供了许多用于处理复杂数据类型的特性。

其中,结构体、共用体和位运算是三个重要的特性,可以帮助开发者更高效地处理数据。

本教程将介绍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语言结构体与共同体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语言中的结构体和共用体(联合体)/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语言编程:第十一章结构体与共用体

C语言编程:第十一章结构体与共用体
• 例如:表示一个学生的有关信息(学号,姓名,性 别 年龄,总分,地址),其具体数据情况如图所 示: num name sex age score addr
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语⾔中的结构体及共⽤体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、指向结构体类型数据的指针 概念:结构体变量的指针就是该结构体变量所占据的内存段的起始地址。

C语言程序设计第9章结构体与共用体简明教程PPT课件

C语言程序设计第9章结构体与共用体简明教程PPT课件

//书名 //作者 //出版社 //价格
【例9.2】定义一个结构体类型struct student,描 述学生的基本信息,包含学号、姓名、性别和成绩
struct student { int num; //学号 char name[20]; //姓名 char sex; //性别, M-男,F-女 float score; //成绩 };
第9章
结构体与共用体
第9类型,但在实际问题中, 数据要复杂一些,往往具有不同的数据项和类型: 例如: 图书基本信息 用户自定义 学生基本信息 数据类型 球赛基本信息 ……
方法:创建结构体类型、共用体类型(或称为联合 体类型)和枚举类型
C语言程序设计 第9章 结构体与共用体 2
9.1 结构体类型
整 型
单精度型float
基本类型
实型(浮点型)
双精度型double
字符类型char
C 数 据 类 型
数组 构造类型
结构体struct 共用体union 枚举类型enum 指针类型
本章所介绍 空类型void 的数据类型
C语言程序设计
数据类型决定: 1. 数据占内存字节数 2. 数据取值范围 3. 其上可进行的操作
C语言程序设计
定义了结构体类型: struct book 定义了结构体变量: book1,book2;
第9章 结构体与共用体
14
• 方式三:
定义无名结构体类型的同时定义结构体变量
struct { 成员列表 } 变量名列表; struct { char name[40]; char author[100]; char publish[100]; float price; }book1,book2; 说明:第三种方法,由于没 有给出结构体类型标识符, 在实际应用中,此方法往往 是一次性的,适用于定义临 时的局部变量或者嵌套的结 构体成员变量。

C语言学习入门笔记之结构体与共用体

C语言学习入门笔记之结构体与共用体

结构体与共用体笔记定义结构体C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体(structre)。

在其他一些高级语言中称为“记录”.定义后的结构体类型和系统提供的标准类型(如int, char, float, double 等)具有相似的作用,都可以用来定义变量,只不过int等类型是系统已声明的,而结构体类型是由用户根据需要在程序中指定的。

定义一个结构体类型的一般形式为:struct 结构体名{ 成员表列};注意:1.结构体类型的名字是由一个关键字struct和结构体名组合而成的(例如struct Student) ,结构体名是由用户指定的,又称“结构体标记”,以区别于其他结构体类型。

上面的结构体声明中Student就是结构体名(结构体标记)。

2.花括号内是该结构体所包括的子项,称为结构体的成员。

“成员表列"(member list)也称为“域表”(field list),成员表列由若干个成员组成,每一个成员是结构体中的一个域。

对每个成员也必须作类型说明,其形式为:类型说明符成员名;成员名的命名应符合标识符的书写规定。

例如:struct stu{int num;char name[20];char sex;float score;};3.一个结构体的成员可以属于另一个结构体类型(嵌套)。

例如:struct Date //声明一个结构体类型struct Date{ int month;//月int day;//日int year;//年}struct Student//声明一个结构体类型struct Student{ int num;char name[20];char sex;int age;struct Date birthday;//成员birthday属于struct Date 类型char addr[30];};结构体类型变量1.定义结构体类型变量说明结构变量有以下三种方法。

C语言程序设计——结构体和共用体(完整版)

C语言程序设计——结构体和共用体(完整版)

printf(“name\tage\tjob\tclass/office\n”); for(i=0;i<PN;i++) {if(body[i].job==„s‟) printf(“%s\t%d\t%3c\t%d\n”,body[i].name, body[i].age,body[i].job,body[i].units.class); else printf(“%s\t%d\t%3c\t%s\n”,body[i].name, body[i].age,body[i].job,body[i].units.office); } }
birthday num name sex age month day year addr
§12.3结构体数组
结构体数组的每一个元素都是具有相同结构类型 的结构体变量。 例:struct student {int num; char name[20]; float score; }stu[3]; 其中,定义了一个结构体数组stu,共有3个元素, 每个元素都具有struct student的结构形式。
§12.6共用体
共用体(也称为联合)也是一种构造的数据类型。 共用体是将不同类型的数据组织在一起共同占用 同一段内存的一种构造数据类型。 例如,在校学生和教师都填写以下表格: 姓名 年龄 职业 单位 其中,职业分两类:教师和学生; 而单位一栏里,学生填写班级编号(整型类型), 教师填写某系某教研室(整型类型) 。
§12.7枚举数据类型
当某些变量仅由有限个数据值组成时,通常用枚 举类型来表示。 所谓枚举是指将变量的值一一列举出来,变量的 值只限于列举出来的值的范围内。如一周只有7天, 一年只有12个月等等。
注意:枚举类型是一种基本数据类型,而不是一 种构造类型。关键字为enum。

C语言PPT第11章结构体与共用体

C语言PPT第11章结构体与共用体
struct date {int month; int day; int year; };
struct student {char name[20]; struct date birthday; char addr[30]; } student1, student2;
student1.birthday.month=5;
三、结构体数组
例2 struct student 对候选人得票的统计程序。设有3个候选人,10个 { int num; 投票人, 每次输入一个得票的候选人的姓名,最后 char sex, name[20]; 输出各候选人得票数。 float score; } stu1[30];
name
count
#include "string.h" struct per {char name[20]; int count; } a[3]={"li",0,"zhang",0,"feng",0}; main( ) {int i,j; char name[20]; for(i=1;i<=10;i++) {gets(name); for(j=0;j<3;j++) if(strcmp(name,a[j].name)==0)a[j].count++; } for(j=0;j<3;j++) printf("%5s:%d\n",a[j].name,a[j].count); }
四、指向结构体类型数据的指针
1. 指向结构体变量的指针 例3 main( ) {struct student {int num; char sex,name[20]; float score; } st1,*p; p=&st1; st1.num=16; (*p).sex='M'; strcpy(p->name,"LiMing"); p->score=82.5; printf("%d,%c,%s,%f \n",p->num,p->sex,p->name, p->score); }

结构体与共用体小结

结构体与共用体小结

结构体与共用体小结结构体和共用体是C语言中非常重要的数据类型。

它们在存储和组织数据方面提供了更灵活的选择。

本文将从定义、声明、初始化、使用和比较等方面对结构体和共用体进行详细讨论。

一、结构体(Struct)结构体是一种能够存储不同类型数据的自定义数据类型。

它允许将不同类型的数据组合在一起,形成一个逻辑上的实体。

1.定义和声明结构体的定义使用关键字`struct`,可以像定义其他变量一样定义结构体。

例如:```cstruct Studentint id;char name[20];int age;};```在定义结构体后,可以使用该结构体类型声明变量。

例如:```cstruct Student stu1;```也可以一步完成结构体类型定义和变量声明。

例如:```cstruct Studentint id;char name[20];int age;} stu1;```2.初始化结构体变量可以使用初始化列表初始化。

例如:```cstruct Student stu1 = {1001, "John", 20};```3.使用结构体变量的成员可以通过`.`运算符访问。

例如:```cstu1.id = 1001;strcpy(, "John");stu1.age = 20;```4.比较结构体不能直接比较,但可以通过定义比较函数来比较。

例如:```creturn (stu1.id == stu2.id && strcmp(, ) == 0 && stu1.age == stu2.age);```二、共用体(Union)共用体是一种特殊的数据类型,它允许不同类型的成员共享同一块内存空间。

共用体的成员在内存中是相互重叠的,只有一个成员可以被赋值和使用。

1.定义和声明共用体的定义使用关键字`union`,可以像定义其他变量一样定义共用体。

例如:```cunion Dataint i;float f;char str[20];};```在定义共用体后,可以使用该共用体类型声明变量。

c语言第11章-结构体与共用体

c语言第11章-结构体与共用体

}
§11.6 构造体和指针
ma指in向() 构造体变量旳指针
{ s❖tr定uc义t st形ud式en:t struct 构造体名 *构造体指针名; { 例lonsgtruicntt sntuudmen;t *p; char name[20]; ❖使str用ucch构tars造tsued体xe;n指t 针变存量储引构用造组体p员变形量式在内存旳起始地址
struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Roa
形式二:
struct 构造体名
{ 类型标识符 组员名; 类型标识符 组员名;
……………. }构造体变量={初始数据};
例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”
❖用构造体变量旳组员作参数----值传递 ❖用指向构造体变量或数组旳指针作参数----地址传递 ❖用构造体变量作参数----多值传递,效率低
例 用构造体变量作函数参数
(main)
struct data { int a, b, c; };
accacbbb::::::::2332333370070
main()
}
指向构造体数组旳指针
例 指向构造体数组旳指针
struct student { int num;
char name[20]; char sex; int age;
p num
name
sex
p+1
age

C语言--第九章 结构体与共用体

C语言--第九章 结构体与共用体

free(pa);
h
19
3. 链表 链表概念:同一类型的结构体变量连接到一起,构成一个链, 各个结构体变量即为链表中的结点。 (1) 静态链表 所有结点都是在程序中定义的,不是临时开辟的,也不能用完后 释放,这种链表称为”静态链表”. 例如:
struct link
{
char ch;
struct link *p;
/* bk[0] bk[1] 3. 结构体指针初始化
bk[2] */
结构体类型数据的指针与其它类型数据的指针初始化相同
例如:struct stu
std,pers[3],*psd1=&std,*psd2=pers,(*p)[3]=&pers;
h
6
9.1.4 结构体类型数据的引用
1. 结构体成员的引用 若已定义了一个结构体变量和该类型的指针变量,并且该指针
p=&t; f(p); } 程序运行结果为:
C language 85
h
13
4. 结构体类型的函数 例9.5 找出成绩最高的学生记录,学生记录由学号和成绩组 成。
#include “stdio.h”
#define N 5
struct stu
{
char num[5];
float s;
};
struct stu fun(struct stu a[])
f(t); } 程序运行结果为:
C language 85
h
12
3. 传递结构体地址 形参结构体指针变量=实参结构体指针
例9.4 #include “stdio.h” struct ST
{ char str[20];int i;}; void f(struct ST *x) { printf(“%s\n%d\n”,x->str,x->i);} main() { struct ST t={“C language”,85},*p;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;
相关文档
最新文档