第10章 结构体、共用体、枚举类
10 结构体

}
程序运行结果如下:
Number:102
Name:Zhang ping
Sex:M
Age:20
Score:78.5
本例中,对结构体变量 boy1 作了初始化赋值,然后把 boy1 的值整体赋予 boy2,最后 用 printf 函数输出 boy2 各成员的值。
10.3 结构体数组
10.3.1 结构体数组的定义 结构体数组的每一个元素都具有相同的结构体类型。在实际应用中,经常用结构体数
10.4.1 指向结构体变量的指针 指向结构体变量或结构体数组的指针称为结构体指针变量(可简称为结构指针),其
值为所指向的结构体变量或结构体数组的首地址。 定义结构体指针变量的一般形式为: struct 结构体名 *结构体指针变量名 例如: struct stu boy,*pstu; 定义了结构体变量 boy 和结构体指针变量 pstu,通过赋值语句可使 pstu 指向 boy,即: pstu=&boy; /* boy 的地址赋给 pstu */ 注意: (1) 结构体指针变量与普通指针变量的性质一样,赋值前不能使用。 (2) 编译系统不给代表结构类型的结构体名分配空间,所以下面的用法是错误的。 pstu=&stu; 利用结构体指针可以访问结构体变量的各个成员,一般形式为: 结构体指针变量->成员名 其中,运算符“->”的优先级比较高,高于算术运算符、关系运算符、逻辑运算符等。
char sex;
int age;
float score;
}boy2,boy1={102,"Zhang ping",'M',20,78.5};
boy2=boy1;
printf("Number:%d\nName:%s\n",boy2.num,);
计算机二级C语言考点:结构体和共用体

计算机二级C语言考点:结构体和共用体计算机二级C语言考点:结构体和共用体C语言是一门通用计算机编程语言,应用广泛。
以下就是店铺分享计算机二级C语言考点结构体和共用体,希望对大家有帮助!【考点1】结构体类型的说明结构体是若干个类型数据的集合,结构体类型说明格式:struct 类型名 {类型1 成员名1;类型2 成员名2;……};,以上整个部分是一个数据类型,与整型的int是同样地位。
可用typedef把结构体类型替换成一个只有几个字母的简短标识符。
【考点2】结构体变量的定义结构体变量是用说明的结构体类型所定义的一个变量,与结构体类型不是一回事。
一个结构体变量所占字节数为其所有成员所占字节数之和。
如struct stu{char name[10];int age;} a,b;则表明定义了两个结构体变量a,b,每个变量占14个字节。
a,b与int i,j;中的变量i,j是同样地位。
typedef 考的'很多(教材150页例6)。
【考点3】结构体成员的引用引用成员可用以下3种方式:(1)结构体变量名.成员名;(2)指针变量名->成员名:(3)(*指针变量名).成员名。
点(.)称为成员运算符,箭头(->)称为结构指向运算符。
【考点4】共用体共用体的使用格式与结构体相似,共用体定义的关键字为union,共用体所占字节数是所有成员中字节数最大的那个。
union TT{ int a;char ch[2];} t1 ;main(){t1.a=0x1234;printf("%x ",t1.ch[0] );printf("%x ",t1.ch[1] );}考点一: sizeof (struct TT) = 2;考点二: TT t1 ; t1.a=0x1234;那么 ch[0]=0x 34; ch[1]=0x12结构体和共用体以及链表要掌握最简单的。
typedef 考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何填加和删除节点,以及何如构成一个简单的链表,一定记住链表中的节点是有两个域,一个放数值,一个放指针。
共用体类型,结构体类型

共⽤体类型,结构体类型⽬录1.1 含义:⽤同⼀段内存存放不同类型的变量,也就是使⽤覆盖技术,后⼀个数据覆盖前⾯的数据,使⼏个不同的变量共享同⼀段内存的结构成为共⽤体。
往往在数据处理中,有时需要对同⼀段内存空间安排不同的⽤途,这时⽤共⽤体类型⽐较⽅便。
1.2 形式union Data{int i;char ch;float f;}a,b,c;1.3 引⽤共⽤体变量的⽅式如a.f;1.4 共⽤体类型的数据特点(1).共⽤体与结构体⾮常相似,结构体变量所占内存长度等于各个成员占内存长度的和,每个成员分别占有⾃⼰的内存,⽽共⽤体变量所占内存长度等关于最长的成员的长度。
(2).同⼀段内存可以存放⼏种不同类型的成员,但每⼀瞬间只能存放其中⼀个成员。
(3).可以对共⽤体变量初始化,但初始化表中只能有⼀个常量,union Data a = {16}。
(4).共⽤体变量中起作⽤的是最后⼀次被赋值的成员变量。
(5)共⽤体变量的地址和它的各个成员的地址都是同⼀地址。
(6)不能对共⽤体变量名赋值,也不能企图引⽤变量名来得到⼀个值,如a = 1 不对。
(7)可以使⽤共⽤体变量的指针做函数参数。
(8)共⽤体类型可以出现在结构体类型定义中,也可以定义共⽤体数组,繁反之也可以。
举⼀个简单的例⼦如下:1 #include<stdio.h>2struct3 {4int num;5char name[10];6char sex;7char job;8 union9 {10int clas;//成员班级11char posion[10];//成员职务12 }category; //成员共⽤体变量13 }person[2]; //定义结构体数组,有两个元素14int main()15 {16int i;17for (int i = 0; i < 2; i++)18 {19 printf("输⼊两个成员的数据信息:");20 scanf_s("%d %s %c %c",&person[i].num,&person[i].name,&person[i].sex,&person[i].job);21if (person[i].job == 's')22 scanf_s("%d",&person[i].category.posion);23else if (person[i].job == 't')24 scanf_s("%s", &person[i].category.posion);25else26 printf("输⼊有误");27 }28 printf("\n");29 printf("详细信息如下:");30for (int i = 0; i < 2; i++)31 {32if (person[i].job == 's')33 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.clas); 34else35 printf("%-6d,%-6s%,%-6c,%-6d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.posion);36 }37return0;38 }View Code 含义:由不同类型数据组成的组合型数据结构成为结构体。
专题10 结构体和共用体的概念及应用

4)使用typedef说明一个结构体类型,再用新类型名来定义变量(常用)
typedef { struct
typedef struct ST { struct date birthday; a; long int b; float sc[4]; char c[2]; }STREC; } NEW; // STREC是一个具体的结构体类型名,可以用它来定义相应的变量,就如int、char 则下面叙述中正确的是 一样,用它来定义变量时,就不能用struct A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量 STREC std,pers[3],*pstd;
练习
3.以下结构体类型说明和变量定义中正确的是 [08年4月份题目] A)typedef struct {int n; char c;}REC; REC t1,t2; B)struct REC; {int n; char c;}; A REC t1,t2; C)typedef struct REC ; {int n=0; char c='A';}t1,t2; D)struct {int n;char c;}REC REC t1,t2;
练习
4.有以下程序[08年9月] C #include<stdio.h> struct st {int x,y;}data[2]={1,10,2,20}; main() { struct st *p=data; printf("%d,",p->y); printf("%d\n",(++p)->x); } 程序的运行结果是 A) 10,1 B)20,1 C) 10,2 D)20,2 5.有以下程序[08年9月] main() D { struct STU { char name[9]; char sex; double score[2];}; struct STU a={"Zhao",'m',85.0,90.0},b={"Qian",'f',95.0,92.0}; b=a; //结构体变量可以直接赋值 printf("%s,%c,%2.0f,%2.0f\n", , b.sex, b.score[0], b.score[1]); } 程序的运行结果是( ) A) Qian,f,95,92 B) Qian,m,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90
C语言习题结构体和杂类(答案)

C语言习题结构体和杂类(答案)第十章结构体和杂类一.选择题1.如下说明语句,则下面叙述不正确的是(C)。
tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义结构体类型C.tutype是用户定义的结构体类型名(变量名)D.a和b都是结构体成员名2.在16位PC机中,若有定义:tructdata{inti;charch;doublef;}b;则结构变量b占用内存的字节数是(D)。
A.1B.2C.8D.11A.1和2B.2和3C.7和2D.7和84.以下程序的输出结果是(D)。
unionmyun{truct{int某,y,z;}u;intk;}a;main(){a.u.某=4;a.u.y=5;a.u.z=6;a.k=0;printf(\A.4B.5C.6D.05.当定义一个共用体变量时,系统分配给它的内存是(C)。
A.各成员所需内存量的总和B.结构中第一个成员所需内存量C.成员中占内存量最大的容量D.结构中最后一个成员所需内存量6.若有以下程序段:uniondata{inti;charc;floatf;}a;intn;则以下语句正确的是(C)。
A.a=5;B.a={2,’a’,1.2}C.printf(“%d”,a);D.n=a;7.设truct{inta;charb;}Q,某p=&Q;错误的表达式是(d)。
A.Q.aB.(某p).bC.p->aD.某p.b9.以下对C语言中共用体类型数据的叙述正确的是(c)。
A.可以对共用体变量直接赋值B.一个共用体变量中可以同时存放其所有成员C.一个共用体变量中不能同时存放其所有成员D.共用体类型定义中不能出现结构体类型的成员10.下面对typedef的叙述中不正确的是(b)。
A.用typedef可以定义多种类型名,但不能用来定义变量B.用typedef可以增加新类型C.用typedef只是将已存在的类型用一个新的标识符来代表D.使用typedef有利于程序的通用和移植二.判断题1.共用体类型的变量的字节数等于各成员字节数之和。
《C语言程序设计教程》第三版课后习题参考答案

《C语言程序设计教程》第三版课后习题参考答案C语言程序设计教程第三版课后习题参考答案第一章:C语言概述1.1 C语言的特点答案:C语言是一种通用的、面向过程的程序设计语言,具有高效、简洁、灵活等特点。
它提供了丰富的程序设计元素和功能,适用于各种不同的应用领域。
1.2 C语言程序的基本结构答案:C语言程序由预处理指令、函数声明、函数定义、变量声明和语句组成。
其中,预处理指令用来引入头文件或定义宏,函数声明用来声明函数的名称和参数,函数定义用来实现函数的功能,变量声明用来声明变量的类型和名称,语句用来表达具体的计算过程。
1.3 C语言的数据类型答案:C语言提供了多种数据类型,包括基本类型(整型、浮点型、字符型等)和派生类型(数组、指针、结构体等)。
每种数据类型在内存中占据一定的存储空间,并具有特定的取值范围和操作规则。
1.4 C语言的运算符和表达式答案:C语言支持各种运算符和表达式,例如算术运算符(+、-、*、/等)、关系运算符(>、<、==等)、逻辑运算符(&&、||、!等)等。
通过运算符和表达式可以进行各种数值计算和逻辑判断。
第二章:基本数据类型与运算2.1 整型数据类型答案:C语言提供了不同长度的整型数据类型,包括有符号整型(int、long等)和无符号整型(unsigned int、unsigned long等)。
整型数据类型可以表示整数值,并具有不同的取值范围。
2.2 浮点型数据类型答案:C语言提供了浮点型数据类型(float、double等),用来表示带小数部分的实数值。
浮点型数据可以表示较大或较小的数值,并具有一定的精度。
2.3 字符型数据类型答案:C语言提供了字符型数据类型(char),用来表示单个字符。
字符型数据可以用于表示各种字符(包括字母、数字、符号等)。
2.4 布尔型数据类型答案:C语言不直接支持布尔型数据类型,但可以使用整型数据类型来表示布尔值(0表示假、非零表示真)。
c语言结构体嵌套枚举型

C语言结构体嵌套枚举型1. 介绍C语言是一种广泛应用于系统编程和嵌入式开发的高级编程语言。
在C语言中,结构体和枚举类型是两种常用的数据类型,它们分别用于组织和表示复杂的数据结构和枚举值。
结构体(struct)是一种用户自定义的数据类型,它允许将不同类型的数据组合在一起,形成一个逻辑上相关的数据单元。
结构体可以包含基本数据类型(如整型、浮点型等)和其他结构体类型,这样就可以实现更复杂的数据结构。
枚举类型(enum)用于定义一组具名的常量值,枚举值可以作为整型来使用,但它们的取值范围是有限的,只能是预定义的枚举成员。
本文将介绍C语言中结构体和枚举类型的基本概念和用法,并重点讨论结构体中嵌套枚举型的应用。
2. 结构体的定义与使用2.1 结构体的定义在C语言中,可以使用struct关键字来定义一个结构体类型。
结构体定义的一般形式如下:struct结构体名 {数据类型成员1;数据类型成员2;// ...};其中,结构体名是用户自定义的名称,成员1、成员2等是结构体的成员变量名,可以根据实际需要定义多个成员变量。
成员变量的数据类型可以是任意合法的C数据类型,包括基本数据类型和其他结构体类型。
2.2 结构体的使用定义结构体类型后,可以使用该类型来创建结构体变量。
结构体变量的创建方式与普通变量类似,可以在定义时进行初始化,也可以在后续使用过程中进行赋值。
struct结构体名变量名1 = {初始值1, 初始值2, ...};struct结构体名变量名2;变量名2.成员1 = 值1;变量名2.成员2 = 值2;// ...结构体变量的成员可以使用.运算符来访问和修改,其中.左边是结构体变量名,右边是成员变量名。
2.3 结构体的嵌套在结构体中,可以使用其他结构体类型作为成员变量,这样就可以实现结构体的嵌套。
嵌套结构体可以更好地组织和表示复杂的数据结构。
struct结构体名1 {数据类型成员1;struct结构体名2 成员2;// ...};上述代码中,结构体名2是另一个结构体类型,可以在结构体名1中作为成员变量使用。
在st语言中枚举体 联合体 结构体区别

在C语言中,枚举体、联合体和结构体是用来定义新的数据类型的关键字。
它们都能够帮助程序员更好地组织数据,提高代码的可读性和可维护性。
在本文中,我们将深入探讨这三种数据类型的区别和特点。
一、枚举体(enum)1. 枚举体是一种由程序员定义的数据类型,用来表示一组有限的取值范围。
2. 在定义枚举体时,需要使用关键字enum,然后在花括号中列出枚举的取值。
3. 枚举体的每个取值都有一个对应的整数值,默认从0开始递增。
4. 枚举体可以用来定义一些常用的状态值,比如星期几、月份等。
5. 枚举体的定义形式如下:```enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};```二、联合体(union)1. 联合体也是一种由程序员定义的数据类型,用来表示相同的内存空间可以存储不同类型的数据。
2. 在定义联合体时,需要使用关键字union,然后在花括号中列出联合体的成员。
3. 联合体的大小等于其最大成员的大小。
4. 联合体的所有成员共享同一块内存,可以存储不同类型的数据。
5. 联合体可以用来节省内存空间,但在使用时需要谨慎,以避免数据混乱。
6. 联合体的定义形式如下:```union Data {int i;float f;char str[20];};```三、结构体(struct)1. 结构体是一种由程序员定义的复合数据类型,用来表示一组不同类型的数据。
2. 在定义结构体时,需要使用关键字struct,然后在花括号中列出结构体的成员。
3. 结构体的成员可以是不同类型的数据,可以是基本类型、数组、指针等。
4. 结构体的大小等于所有成员大小的总和,但可能会因为对齐规则而有所增加。
5. 结构体可以用来表示复杂的数据结构,比如学生信息、员工信息等。
6. 结构体的定义形式如下:```struct Student {int id;char name[20];float score;};```枚举体、联合体和结构体是C语言中用来定义新的数据类型的关键字,它们分别用来表示有限取值范围的枚举、共享内存空间的联合和复合数据类型的结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 声明一个结构体类型的一般形式为:
struct 结构体名
{成员表列};
如:struct student
{
int num;char name[20];char sex;
int age;float score;char addr[30];
};
2 定义结构体类型变量的方法
(1)先声明结构体类型再定义变量名
例如:struct student student1, student2;
| | |
结构体类型名结构体变量名
(2)在声明类型的同时定义变量
这种形式的定义的一般形式为:
struct 结构体名
{
成员表列
}变量名表列;
(3)直接定义结构体类型变量
其一般形式为:
struct
{
成员表列
}变量名表列;
即不出现结构体名。
注意:
成员名可以与程序中的变量名相同,二者不代表同一对象。
3 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。
例如:
scanf(″%d″,&student1.num);
(输入student1.num的值)
printf(″%o″,&student1);
(输出student1的首地址)
4 结构体数组的初始化
struct student
{int num;char name[20]; char sex;
int age; float score; char addr[30];
}stu[2]={{10101,″LiLin″,′M′,18,87.5,″103 BeijingRoad″},{10102,″Zhang Fun″,′M′,19,99,″130 Shanghai Road″}};
5 指向结构体变量的指针
#include <string.h>
#include <stdio.h>
void main()
{struct student{long num;char name[20];
char sex; float score;};
struct student stu_1;
struct student* p; p=&stu_1;
stu_1.num=89101;strcpy(stu_,”LiLin”);
stu_1.sex=‘M’;stu_1.score=89.5;
printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,stu-1.num,,stu-1.sex,stu-1.score);
printf(″No.:%ld\nname:%s\nsex:%c\nscore:%f\n″,(*p).num,(*p).name,(*p).sex,(*p).score);
}
6 以下3种形式等价:
结构体变量.成员名
(*p).成员名
p->成员名
7 用指针处理链表
(1)malloc函数
(2) calloc函数
(3) free函数
其函数原型为void free(void *p);
7.1 typedef struct
{
int n;
struct
{
int y,m,d;
}date;
}PERSON;
下面定义结构体数组并赋初值
PERSON x[2]={1,04,10,1,2,04,12,30};
PERSON x[2]={{1,04,10,1},{2,04,12,30}};
PERSON x[2]={1,{04,10,1},2,{04,12,30}};
7.2
struct person
{
int id;
char name[10];
}per={1,"123456"};
="123456"
[0]='1'
7.3
struct sk
{
int n;
float x;
}date,*p;
要使p指向date中的n域:
p=(struct sk *)&date.n;
8 共用体的概念
使几个不同的变量共占同一段内存的结构称为“共用体”类型的结构。
共用体变量所占的内存长度等于最长的成员的长度。
不能引用共用体变量,
而只能引用共用体变量中的成员。
不能对共用体变量名赋值,
不能企图引用变量名来得到一个值,
不能在定义共用体变量时对它初始化(只有一个成员时可以,也可以只初始化一个值)。
不能把共用体变量作为函数参数,
不能使函数带回共用体变量,
但可以使用指向共用体变量的指针
8.1 声明共用体类型、定义共用体类型变量的方法与结构体类型一样
9 枚举类型:
将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。
说明:
(1)在C编译中,对枚举元素按常量处理,故称枚举常量。
它们不是变量,不能对它们赋值。
(2) 枚举元素作为常量,它们是有值的,C语言编译按定义时的顺序使它们的值为0,1,2…
(3) 枚举值可以用来作判断比较。
(4) 一个整数不能直接赋给一个枚举变量。
9.1 声明枚举类型、定义枚举类型变量的方法与结构体类型一样
10 枚举类型不支持++操作
enum color
{
red,yellow,blue,white,black
};
enum color i;
for (i=red;i<=black;i=(enum color)(i+1))
10.1
enum money
{
fen1=1,fen2=2,fen5=5,
jiao1=10,jiao2=20,jiao5=50,
yuan1=100,yuan2=200,yuan5=500,yuan10=1000,
yuan50=5000,yuan100=100000
};
11 用typedef定义类型
声明NUM为整型数组类型:
typedefintNUM[100];
声明STRING为字符指针类型:
typedef char *STRING;
声明POINTER为指向函数的指针类型,该函数返回
整型值:
typedef int (*POINTER)()
12 ①先按定义变量的方法写出定义体(如:int i)。
②将变量名换成新类型名(例如:将i换成COUNT)。
③在最前面加typedef
(例如:typedef int COUNT)。
④然后可以用新类型名去定义变量。
①先按定义数组变量形式书写:int n[100];
②将变量名n换成自己指定的类型名:
int NUM[100];
③在前面加上typedef,得到
typedef int NUM[100];
④用来定义变量:NUM n;
13(3) 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型,把它们单独放在一个文件中,然后在需要用到它们的文件中用#include命令把它们包含进来。
(4) 使用typedef有利于程序的通用与移植。
(5) typedef与#define有相似之处,例如:typedef int COUNT;#define COUNT
int的作用都是用COUNT代表int。
但事实上,它们二者是不同的。
#define 是在预编译时处理的,它只能作简单的字符串替换,而typedef是在编译时处理的。
实际上它并不是作简单的字符串替换,而是采用如同定义变量的方法那样来声明一个类型。