结构体与共用体
共用体类型,结构体类型
共⽤体类型,结构体类型⽬录
1.共⽤体类型
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
2 struct
3 {
4 int num;
5 char name[10];
6 char sex;
7 char job;
8 union
9 {
10 int clas;//成员班级
11 char posion[10];//成员职务
12 }category; //成员共⽤体变量
13 }person[2]; //定义结构体数组,有两个元素
14 int main()
15 {
16 int i;
17 for (int i = 0; i < 2; i++)
18 {
19 printf("输⼊两个成员的数据信息:");
高职升本复习资料-结构体与共用体-专项练习题
软件学院专业课集训营资料-结构体与共用体专项练习题
1. 设有以下说明语句:
struct ex
{ int x;
float y;
char z;
} example;
则下面的叙述中不正确...的是
A. struct是结构体类型的关键字 B. example是结构体类型名
C. x,y,z都是结构体成员名 D. struct ex是结构体类型名
2. 设有以下说明语句
typedef struct data
{ int n;
char ch[8];
} PER;
则下面叙述中正确的是
A. struct data是结构体变量名 B. PER是结构体类型名
C. typedef struct 是结构体类型 D. struct 是结构体类型名
3. 在程序VC6.0下,若有如下定义:
struct data
{ int i;
char ch;
double f;
} b;
则结构体变量b占用内存的字节数是
A. 13 B. 3 C. 8 D. 11
4. 以下程序在VC6.0下的运行结果是
#include
main()
{ struct date
{ int year,month,day; }today;
printf("%d\n",sizeof(struct date)); }
A. 6 B. 8 C. 10 D. 12
5. 设有如下定义:
struct sk
{ int a;
float b;
} data,*p;
若有p=&data,则对data中的成员a的正确引用是
A. (*p).data.a B.(*p).a C. p->data.a D. p.data.a
6. 以下对结构体变量stu1中成员age的非法..引用的是
struct student
C5_结构体-共用体-枚举
一、 结构体
结构体是一种复合数据类型,是不同类型数据的集合,在C语言中并没有给出具体的结构图类型,但是给出了定义结构体的方法。所以通常把结构体也称为自定义类型。
1.1 结构体的定义
struct {
类型 结构体成员名;
类型 结构体成员名;
… …
};
例如:
struct student {
int sno;
int age;
char name[30];
};
在程序中用 struct student 来表示该结构体的类型。
1.2 结构体变量的定义
1.2.1 常规定义
struct student {
int sno;
char name[30];
float score;
};
struct student std1; //st1是结构体变量
1.2.2 与类型同时定义
struct student {
int sno;
char name[30];
float score;
} std2; //st2是结构体变量
1.2.3 直接定义
struct {
int sno;
char name[30];
float
score;
} std3; //st3是结构体变量
1.3 结构体变量的初始化
1.3.1 完全初始化
按照成员的先后顺序依次给每一个成员赋值。
struct student st1 = {1001,"张飞",98.9};
1.3.2 部分初始化
按照成员的先后顺序依次给前若干个成员赋值。 struct student st1 = {1001,"张飞"};
1.3.3 指定成员初始化
不按顺序给某些成员赋值
struct student st1 = {.name="关羽", .score=100};
C语言 选择题库第10章 结构体与共用体
第10章 结构体与共用体
1. 以下叙述中错误的是( )。
A) 可以通过typedef增加新的类型
B) 可以用typedef将已存在的类型用一个新的名字来代表
C) 用typedef定义新的类型名后,原有类型名仍有效
D) 用typedef可以为各种类型起别名,但不能为变量起别名
参考答案:A
【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。
2.以下关于typedef的叙述错误的是
A) 用typedef可以增加新类型
B) typedef只是将已存在的类型用一个新的名字来代表
C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D) 用typedef为类型说明一个新名,通常可以增加程序的可读性
参考答案:A
【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。所以A选项错误。
3. 若有以下语句
typedef struct S
{ int g; char h; } T;
以下叙述中正确的是
A) 可用S定义结构体变量 B) 可用T定义结构体变量
C) S是struct 类型的变量 D) T是struct S类型的变量
参考答案:B
【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。
4. 设有以下语句
typedef struct TT
{ char c; int a[4]; } CIN;
则下面叙述中正确的是
A) CIN是struct TT类型的变量 B) TT是struct类型的变量
C) 可以用TT定义结构体变量 D) 可以用CIN定义结构体变量
实验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 44 样例输出:1
2、学生成绩
/JudgeOnline/problem.php?id=1518
题目描述
现有有N个学生的数据记录,每个记录包括学号、姓名、三科成绩。编写一个函数input,用来输入一个学生的数据记录。编写一个函数print,打印一个学生的数据记录。在主函数调用这两个函数,读取N条记录输入,再按要求输出。 N<100
输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
输出:每个学生的学号、姓名、三科成绩占一行,逗号分开。
样例输入
2
a100 zhblue 70 80 90
b200 newsclan 90 85 75
样例输出
a100,zhblue,70,80,90
b200,newsclan,90,85,75
3、平均分和最高分 /JudgeOnline/problem.php?id=1519
题目描述
有N个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入N个学生的数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩) 输入:学生数量N占一行每个学生的学号、姓名、三科成绩占一行,空格分开。
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、 填空
(1) 为了建立如图所示的存储结构(即每个结点含两个域,data是数据域,next是指向结点的指针域),请填空。
Struct link
{char data;
;
}node;
(2) 以下程序的输出结果是 。
main()
{struct cmplx{int x;int y;} cnum[2]={1,3,2,7};
printf(“%d\n”,cnum[0].y/cnum[0].x*cnum[1].x);}
2、 选择
(1) 根据以下定义,能输出字母M的语句是
A.printf(“%c\n”,class[3].name); B.printf(“%c\n”,class[3].name[1]);
C.printf(“%c\n”,class[2].name[1]); D.printf(“%c\n”,class[2].name[0]);
struct person { char name[9];int age;};
struct person class[10]={ “John”,17,
“Paul”,19,
“Mary”,18,
“Adam”,16,};
(2) 对整个结构能够进行的操作是 。
A. 对结构进行赋值 data next B. 对结构进行存取
C. 对结构进行运算
D. 对结构进行&操作
(3) 不是结构类型的特点的选项为 。
A. 结构体变量可以有不同类型的成员
B. 结构体中的成员都占有存储空间
C. 结构体变量既可以做函数参数,又可以从函数中返回
D. 结构体变量的成员既可以读又可以写
3、 判断
(1) 能在一个存储区内处理不同的类型的数据叫结构。( )
结构体和共用体 注意事项
结构体和共用体 注意事项
以结构体和共用体为主题,本文将介绍一些需要注意的事项。结构体和共用体是C语言中非常重要的数据类型,它们可以用来组织和存储不同类型的数据。在使用结构体和共用体时,需要注意以下几点。
一、结构体的定义和使用
结构体是一种自定义的数据类型,它能够将不同类型的数据组合在一起。在定义结构体时,需要使用关键字struct,并为结构体定义一个名称。结构体中的成员可以是不同的数据类型,可以是基本类型(如int、float等),也可以是其他结构体类型。
在使用结构体之前,需要先定义结构体的类型。定义结构体类型的方式如下:
```
struct Student {
char name[20];
int age;
float score;
};
```
在定义结构体类型后,可以使用该类型创建结构体变量,并对结构体的成员进行赋值。例如:
```
struct Student stu1;
strcpy(, "Tom");
stu1.age = 18;
stu1.score = 90.5;
```
需要注意的是,在访问结构体的成员时,需要使用点操作符(.)来访问成员。例如,访问stu1的name成员可以使用``,访问stu1的age成员可以使用`stu1.age`。
二、共用体的定义和使用
共用体(union)与结构体类似,也是一种自定义的数据类型,可以将不同类型的数据组合在一起。不同之处在于,共用体的所有成员共享同一块内存空间。
共用体的定义方式与结构体类似,也需要使用关键字union,并为共用体定义一个名称。共用体中的成员可以是不同的数据类型,但是共用体的所有成员共享同一块内存空间。
使用共用体时,需要注意以下几点:
1. 共用体的所有成员占用的内存空间是相同的,因此共用体的大小等于最大成员的大小。
2. 在给共用体的成员赋值时,只能对一个成员进行赋值,对其他成员的赋值会改变已经赋值的成员的值。
