结构体与共用体72页PPT

合集下载

拓展知识8-1 共用体

拓展知识8-1 共用体

拓展知识8-1 共用体对于结构体类型,结构体变量中的每一个成员都有各自的存储单元,C语言中还有另外一种数据类型,它当中的每一个成员数据共用一段相同的存储单元,我们把这样的数据类型称为共用体类型。

共用体类型的定义与结构体类型的定义的方式基本相同,只不过它们所使用的关键字不同,定义共用体类型所使用的关键字是union。

1.共用体类型定义的一般格式union 共用体名{数据类型成员名1;数据类型成员名2;… …… …数据类型成员名n;};说明:(1)union是定义共用体类型用的关键字,union与共用体名一起构成共用体类型标识符。

(2)共用体类型定义后,系统并不为其分配存储空间,只有定义了共用体变量后系统才为共用体变量分配相应的存储空间。

【示例1】union data{int a;double b;char c;};定义了一个共用体类型,类型名为data,它有三个成员,a是int型,b是double型,c是char型,它们共用一段存储单元。

2.共用体变量的定义共用体变量的定义与结构体变量的定义基本相同。

一是在定义共用体类型的同时定义共用体变量;二是在定义共用体类型后,用共用体类型标识符(union共用体名)定义共用体变量。

【示例2】union data{int a;double b;char c;}x,y;定义共用体类型的同时定义共用体变量x,y。

【示例2】union data{int a;double b;char c;};union data x,y[3];定义共用体类型后,用共用体类型标识符定义共用体变量x和共用体数组y[3]。

说明:(1)共用体变量定义后,在编译或程序运行时系统为共用体变量分配存储空间,共用体变量的存储长度为各成员中存储长度的最大者。

如【示例2】定义的共用体变量x的存储长度为8个字节。

(2)同样可以定义共用体数组和指向共用体变量的指针。

3.共用体变量的引用对于共用体变量,不能引用整个变量,而只能引用共用体变量中的成员。

最新结构体共同体和用户定义类型

最新结构体共同体和用户定义类型

例:
struct bookcard
{
char num[5];
float money;
}bk[3]={ {“NO.1”,35.5}, {“NO.2”,25.0}, {“NO.3”,55.7}}; 结构体类型变量的引用 在定义了结构体变量后,可以采用下列方法引用 结构体类型的变量: 结构体变量名.成员名 这里″.″是成员(分量)运算符,它在所有的运 算符中优先级最高。
体区别:结构体的每个成员分别占有独立的存 储空间;而共同体重所有的成员共享一段公共 的存储空间;例如un_1类型变量s1的存储如下:
(2)共同体变量中所有成员的首地址与该变量 地址相同。如&s1==&s1.i==&s1.x。
(3)共同体变量在定义时,只能对用第一个成 员的类型值进行初始化。
共用体变量的引用 可以用下面的形式引用共用体变量: 共用体变量名.成员名 对于指针 指针变量名-> 成员名 (*指针变量名).成员名 例如:s1.x=123.4;
给结构体变量、数组赋初值 1、给结构体变量赋初值
所赋初值顺序放在花括号种,结构体成员顺序一一赋 值,对于为给初值的成员系统自动给定值 例如:
struct student {
char name[12]; char sex; stuct date birthday; float sc[4]; }std={“Li Ming”,‘M’,1962,5,10,88,76,85.5,90}; 2、结构体数组赋初值
三、共同体 类型说明: union 共同体表示名 {
类型名1 共同体成员名1; …… 类型名n 共同体成员名n; }; 例如:
Union un_1 {int i;float x;char ch;};

实验9-1 结构体与共用体

实验9-1 结构体与共用体

实验9-1 结构体和共用体(1)1【实验目的】掌握结构体类型变量的定义和使用掌握结构体类型数组的概念和应用了解链表的概念和操作方法【实验要求】掌握结构体类型变量的定义和使用了解链表的概念和操作方法【实验环境】(1) Microsoft XP操作系统(2) Microsoft VC++ 6.0【实验内容】1、第几天/acmhome/problemdetail.do?&method=showdetail&id=1071描述:给定一个日期,输出这个日期是该年的第几天。

输入输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

输出:对于每组输入数据,输出一行,表示该日期是该年的第几天。

样例输入:2000-01-01样例输出:12、学生成绩/JudgeOnline/problem.php?id=1518题目描述现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。

编写一个函数input,用来输入一个学生的数据记录。

编写一个函数print,打印一个学生的数据记录。

在主函数调用这两个函数,读取N条记录输入,再按要求输出。

N<100输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。

输出:每个学生的学号、姓名、三科成绩占一行,逗号分开。

样例输入2a100 zhblue 70 80 90b200 newsclan 90 85 75样例输出a100,zhblue,70,80,90b200,newsclan,90,85,753、平均分和最高分/JudgeOnline/problem.php?id=1519题目描述有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩)输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。

共用体(共9张PPT)

共用体(共9张PPT)

共用体类型对于我们做一般情况下的编程,并不是很常用。
枚举类型变量的定义和使用
➢ 定义形式:
enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n};
➢ 定义方式: SINGLE f;
/*等价于float f;; */
例如:
typedef int INTEGER;
用已定义的枚举类型去定义变量: 共用体的概念及其变量的引用方式
【例7-3】构建最多可以拥有250个字符的字符串类型。
typedef char string[250];
string s;
/*等价于char s[250];*/
strcpy(s, "C Language");
【例7-4】把字符指针定义为字符串类型
typedef char* string;
string s1,s2;
union fourbyte 枚举类型变量的取值范围只能是其所枚举的各个常量,枚举变量的比较相当于比较它们所隐含的整数值,枚举类型变量的值是对应枚举常
量所代表整数值。
{ 枚举类型变量的定义和使用
typedef char* string;
long n; 对于上种方式也可省略枚举类型名:
再用这个类型定义一个变量n:
/*等价于char *s1,s2;*/
s1= "C Language";
s2=s1;
这样一来就使得自定义类型string更像C++和Java语言里 的字符串类型,变量s则更像Java里的字符串对象引用变量。
➢ 共用体所有成员的存储单元共用同一个存储单元,内存 长度是其最长的成员的长度,起作用的成员是最后一次 存放的成员。
主要是为了照顾有其他编程语言背景的人对C语言的使用。

结构体

结构体

一、结构体的说明及变量的定义1.结构体类型的说明由于结构体类型不是C语言提供的标准类型,为了能够使用结构体类型,必须先说明结构体类型,描述构成结构体类型的数据项(也称成员),以及各成员的类型。

其说明形式为:struct结构体名{数据类型成员1;数据类型成员n;};其中,struct是关键字,后面是结构体类型名,两者一起构成了结构体数据类型的标识符。

结构体的所有成员都必须放在一对大括号之中,每个成员的形式为:数据类型成员名;同一结构体中不同的成员不能使用相同的名字,但不同结构体类型中的成员名可以相同。

大括号后面的分号‚;‛不能省略。

如:struct person{char name[10];char sex;int age;int stature;};这里定义了一个结构体类型 person,该类型由4个成员构成。

注意:结构体类型说明中,只是描述该结构体类型的成员,说明了一种数据类型,并不分配空间。

要使用说明的结构体类型,必须定义相应的变量,才会分配空间。

2.结构体变量的定义结构体变量的定义有以下几种形式:?结构体类型的说明与定义分开。

例如说明了struct person之后,可以定义相应的变量:struct person p1, p2;定义了两个struct person变量,每个变量按结构类型中的成员分配相应的空间,每一个结构体变量所分配空间为所有成员占用空间之和。

如p1、p2所占用空间都为15byte。

?说明结构体类型的同时定义相应变量。

如:struct teacher{int number;char name[10];char sex;char profession[6];}t1, t2;在说明struct teacher类型的同时,定义了相应的两个变量t1、t2。

?直接定义结构体变量,没有结构体类型名。

如:struct{int No;char name[10];char sex;int age;}s1, s2;定义两个结构体变量s1、s2,他们都有4个成员,每个变量都占用15byte,但与第2种方式不同,没有给出结构体名,因而无法在其他地方再次使用该结构体类型定义别的变量。

全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章

全国计算机二级c语言学习指南课件与历年真题精讲精析 第14章
全国计算机等级考试
二级C语言程序设计 学习指南与历年真题精讲精析
第14章 结构体、共用体和用户定义 类型
C语言中可由用户构造的两种数据类型:
1、结构体(struct)
2、共用体(union)
14.1 用typedef说明一种新类型名 1、C语言允许用typedef说明一种新类型名: typedef 类型名 标识符; 2、“类型名”必须是在此语句之前已有定义的类型标 识符,“标识符”是一个用户定义标识符,用作新的 类型名。typedef语句的作用仅仅是用“标识符”来
struct dent*s=&s[0]
则以下表达式中值为2的是_____。 (&s[0])->m s[0].m
B)*(p++)->m
C)(*p).m
*(&s[0])->m
s[0].m
*s[0].m
*&a
a

D)*((++p)->m)
*((&s[1])->m)
*s[1].m
*&b
五、函数之间结构体变量的数据传递 1、向函数传递结构体变量的成员 结构体变量中的每个成员可以是简单变量、数组或指针变量 等,作为成员变量,它们可以参与所属类型允许的任何操作。 2、向函数传递结构体变量 结构体变量作实参时,传递给函数对应形参的是它的值,函
}std,pers[3],* pstd; name sex birthday year month day sc[0] sc[1] sc[2] sc[3]
方法2:在说明一个无名结构体类型的同时,直接进行定义: 如:struct { char name[12]; char sex; struct date birthday; float sc[4];

8章 c语言程序设计 结构体,共用体与枚举类型

8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。

c语言程序设计第14章 结构体共用体和用户定义类型-海贝

c语言程序设计第14章 结构体共用体和用户定义类型-海贝

float score; char addr[30];
} stu1,stu2;
3. 直接定义结构体变量
struct {
类型标识符 成员名; 类型标识符 成员名;
……………. } 变量名表列;
4. 先用typedef说明一个结构体类型名, 再用新类型名来定义变量
typedef struct {
char name[12]; char sex; struct date birthday; float sc[4]; } STREC; STREC std, pers[3], *pstd
stu[0] stu[1]
结构体数组初始化
结顺分构序行体初初数始始组化化引:: 用 stru{}例s例scssst引tttrttrruruuusu用s{}{}s{}c[{}ciccitcc3ttnntss;uthh;rrtt]ttt方uudaauu;ssasccrrest[[ntiiiccicciciitcciug式ttntunnnnnnsnunuhhhhh]]uhhedtedttttt==atdtmaaaasdaa;ex:emaaat{{rrrrrearrennnnun;n;gggn{{gnsnsnnsuuuetnsduteeet……eeeteaaa[mmmaem;;;xx;x2xmmm结mnss;;;;;;……0;;ttteeeue]u构[[[;[[}}[2222,,]体000]{{0==]]]……]{;;;{;数111{s{{……10t0111组r0011c0s}},,,p001t名“““,,u{{y,,,LWL“““[……([1LWiLisa下u]tGiin……u.auYaGg标[angY0an}}gaLen]a}}g]n+.L”i.nn;;”g成n+,”i,a‘””‘n;F,mM,,‘员”‘‘’FMM,e,‘’1’,名M,,”91’’1Z,,}9912’h,;,}902a}},0o;,}D, a”);
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档