结构体与共用体
计算机二级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] );
结构体和共用体
结构体和共用体
数据:(1) 基本类型:整形字符型实型
(2) 构造类型:数组结构体共用体
理解:就是将不同类型的数据组成一个有机的整体。
一,声明结构体类型的一般形式:
Struct 结构体名{
成员表列;
};
二,定义结构体类型变量的方法:
(1)先声明结构体类型在定义变量名:
Struct student{
成员表列;
}
Struct student student1,student2;
(2)在声明类型的同时定义变量:
Struct 结构体名{
成员表列;
}变量名表列;//student1,student2;
(3)直接定义结构体变量:
Struct {
成员表列;注:即不出现结构体名;
}变量名表列;
注:成员也可以说一个结构体变量;
例:
Struct date{
Int day;
Int month;
Int year;
}
Struct student {
Int num;
Char name[20];
Char sex;
Struct date birthday;//birthday是struct date类型
}student1,student2;
三,结构体变量的引用:
形式:
结构体变量名.成员名
例:对变量的是赋值:student1.num=10020;
如果成员本身又是一个结构体类型,则要用如干戈成员运算符从高向低级找例:student1.birthday.month;
四,结构体的初始化
Struct student{
Int num;
Char name[20];
Char sex;
Float score;
} a={ 10101,”hashida”,’m’,89.0};
专题10 结构体和共用体的概念及应用
练习
7.下列程序的运行结果为_____________。[09年3月] struct A { int a; char b[10]; double c; }; void f(struct A *t); main() { struct A a={1001, “ZhangDa”,1098.0}; f(&a); printf(“%d,%s,%6.1f\n”,a.a,a.b,a.c); } void f(struct A *t) { strcpy(t—>b, “ChangRong”);}
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;
struct student 可以通过以下方式引用std变量中的成员数据(如sex): std.sex ps->sex (*ps).sex //通过结构体变量引用 //通过指针变量引用 //通过指针变量引用。括号不能省略掉 内嵌结构体成员的引用 要逐层使用成员名定位
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 等不同类型的数据项。
结构体与共用体
• 分析:
•
(1)为了直观性,定义星期的枚举类型。
•
(2)利用间接的方法输入枚举类型的星期几,即用数字代码分别表示
不同的一天,例如0代表星期日,1代表星期一,...。
•
(3)判断今天是工作日还是休息日,工作日从星期一至星期五。
• #include <stdio.h> • enum days{sun,mon,tue,wed,thu,fri,sat}; • void main() •{ • enum days today,weekday; • int day; • printf("enter today(0~6):"); • scanf("%d",&day); • switch(day) /*间接输入今天是星期几*/ • { case 0:today=sun;break; • case 1:today=mon;break; • case 2:today=tue;break; • case 3:today=wed;break; • case 4:today=thu;break; • case 5:today=fri;break;
类型标识符 成员名; 类型标识符 成员名;
…………….
成员类型可以是 基本型或构造型
};
• 注意
1. 不能对定义的一个结构体类型进行赋值、存取或运算
结构体与共用体
9.4 动态存储分配
3.释放内存空间函数free 调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr是一个任意类 型的指针变量,它指向被释放区域的首地址。被释放区应是 由malloc或calloc函数所分配的区域。
9.5 链表的概念
每一次分配一块空间可用来存放一个学生的数据,我们可 称之为一个结点 。
这种形式的说明的一般 形式为:
struct 结构名
{ 成员表列
}变量名表列;
例如: struct stud
{ int num; char name[20]; char sex; float score;
} stud1, stud2; 定义了两个struct stud类 型的变量stud1,stud2。
一种构造数据类型——“结构(structure)”或叫“结构 体”。“结构”是一种构造类型,它是由若干“成员”组成 的。每一个成员可以是一个基本数据类型或者又是一个构造 类型。
定义一个结构的一般形式为:
struct 结构名 {成员表列};
说明: 1.struct是定义结构体类型的关键字,结构名由编程者按 C语言标识符命名规则指定。 2.最后一个花括号外的分号不能省略。 3.成员表列由若干个成员组成,每个成员都是该结构的 一个组成部分。对每个成员也必须作类型说明,其形式为: 类型说明符 成员名;
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
C++中的共用体(union)结构解析与结构体(struct)共用体(union)的区别
C++中的共用体(union)结构解析与结构体(struct)共用
体(union)的区别
C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别
分类: C++开发博文 2012-04-10 09:58 969人阅读评论(1) 收藏举报
structc++c
共用体(union)
一、基础概念
有时需要使几种不同类型的变量存放在同一段内存单元中。虽然在同一段内存中不同数据类型所占字节数不同,但都从同一地址开始存放,也就是使用了覆盖技术,几个变量互相覆盖。这种使几个不同的变量共占一段内存的结构,称为共同体类型的结构(也称为联合类型)。
二、声明共用体类型的一般形式:
union 共用体类型名
{
成员表列
};
定义共用体变量的一般形式:
共用体类型名共用体变量名;
也可以在声明共用体类型的同时定义共用体变量,也可以没有共用体类型名直接定义共用体变量。
union data
{
int i;
char ch;
double d;
}a,b,c;
三、“共用体”与“结构体”区别
结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。共用体变量所占的内存长度等于最长的成员的长度。
四、对共用体变量的访问方式
不能直接引用共用体变量,只能引用共用体变量中的成员。
a.i; a.ch a.f
不能引用共用体变量:cout<<a;
五、共用体类型数据的特点
1、使用共用体变量的目的是希望在同一个内存段存放几种不同类型的数据。注意:在每一瞬时只能存放其中一种,而不是同时存放多种。换句话说,每一瞬时只有一个成员起作用,其他成员不起作用。
结构体与共用体
结构体与共用体
例如:20020945
有如下定义:struct sk
{int a;float b;} data;
int *p 则要使p指向data中的a域,正确的赋值语句是:C (A)p=&a;错误在于结构体变量的成员,必须通过定义的结构
体变量的名来引用其成员
(B)p=&data.a; data.a就是变量的值,而不是成员a地址
(C)p=&data.a;
(D)*p=data.a 同B解释
“()”优于“->”(指向)优于“++”
结构体类型还允许嵌套定义!
使用共用体类型数据时要注意:1,同一段程序可以用来存放几种不同的数据,但是在读写瞬间只能存放其中一种,而不是同时存放几种。系统分配的空间为其中一个所需内存最大的成员的空间,不累加!!!
共用体变量的地址和他的各成员的地址都相同,即无论哪个成员起始地址都相同(参考19960946)。
typedef 原类型名新类型名
typedef v1 int v3
typedef 可以声明各种类型名,但是不能用用来定义变量。他只为已存在的类型增加一个类型名,并不是创造新类型。
(参考20000930和20020947)
C语言结构体共用体和动态内存分配
C语言结构体共用体和动态内存分配共用体是一种特殊的数据类型,可以存储不同类型的数据,但是同一时间只能存储其中的一个成员。共用体的内存空间是所有成员的最大字节长度。动态内存分配是在程序运行时,根据需要动态地分配和释放内存空间。下面将详细介绍C语言中的结构体、共用体和动态内存分配。
结构体是C语言中一种用户自定义的数据类型,它可以同时存储不同类型的数据,使得数据处理更加灵活方便。结构体由多个不同类型的成员变量组成,每个成员变量可以拥有不同的数据类型。结构体的定义以关键字struct开头,后面是结构体名称及其成员变量列表。以下是一个结构体的例子:
```c
struct Person
char name[20];
int age;
float height;
};
```
定义了一个名为Person的结构体,包含了三个成员变量:name、age 和height。其中name是一个字符数组,age是一个整数,height是一个浮点数。我们可以通过`.`操作符访问结构体的成员变量:
```c
struct Person p;
strcpy(, "Tom");
p.age = 20;
p.height = 1.80;
```
上述代码中,我们定义了一个结构体Person的变量p,并为其成员变量赋值。
而共用体(union)是一种特殊的数据类型,它可以在相同的内存空间中存储不同的数据类型。共用体的定义以关键字union开头,后面是共用体名称及其成员变量列表。以下是一个共用体的例子:
```c
union Data
int num;
char name[20];
结构体与共用体
1.4 链表
1.4.1 链表的构成 1.4.2 动态地址分配及所需的函数 1.4.3 链表的基本操作
1.4.1 链表的构成
链表是一种最常见的数据结构,它能动态地进行 存储分配, 可以适应数据动态地增减的情况,且可以 方便地插入、删除数据项。链表有单向链表、双向链 表、环形链表等形式。以单向链表为例,如图1.4所示。
(类型说明符 *)用于强制类型转换。
calloc函数与malloc函数的区别仅在于一次 可以分配n块区域。
3.释放内存空间函数free
调用形式:
free (void * ptr);
1.3.1 指向结构体变量的指针
一个指针变量当用来指向一个结构体变量时, 称之为结构体指针变量。结构体指针变量中的值 是所指向的结构体变量的首地址。
结构体指针变量说明的一般形式为: struct 结构名 * 结构指针变量名 结构指针变量也必须要先赋值后才能使用。 赋值是把结构变量的首地址赋予该指针变量,不能 把结构名赋予该指针变量。结构名和结构变量是 两个不同的概念,结构名只能表示一个结构形式, 编译系统并不对它分配内存空间。只有当某变量 被说明为这种类型的结构时,才对该变量分配存储 空间。 访问结构变量的各个成员的一般形式为: (* 结构指针变量) .成员名 或为: 结构指针变量 - > 成员名
1.1.3ቤተ መጻሕፍቲ ባይዱ结构体变量的初始化
C语言共同体
C语⾔共同体
结构体(Struct)是⼀种构造类型或复杂类型,它可以包含多个类型不同的成员。在C语⾔中,还有另外⼀种和结构体⾮常类似的语法,叫做共⽤体(Union),它的定义格式为:
union 共⽤体名{
成员列表
};
共⽤体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共⽤体的区别在于:结构体的各个成员会占⽤不同的内存,互相之间没有影响;⽽共⽤体的所有成员占⽤同⼀段内存,修改⼀个成员会影响其余所有成员。
结构体占⽤的内存⼤于等于所有成员占⽤的内存的总和(成员之间可能会存在缝隙),共⽤体占⽤的内存等于最长的成员占⽤的内存。共⽤体使⽤了内存覆盖技术,同⼀时刻只能保存⼀个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
共⽤体也是⼀种⾃定义类型,可以通过它来创建变量,例如:
union data{
int n;
char ch;
double f;
};
union data a, b, c;
上⾯是先定义共⽤体,再创建变量,也可以在定义共⽤体的同时创建变量:
union data{
int n;
char ch;
double f;
} a, b, c;
如果不再定义新的变量,也可以将共⽤体的名字省略:
union{
int n;
char ch;
double f;
} a, b, c;
共⽤体 data 中,成员 f 占⽤的内存最多,为 8 个字节,所以 data 类型的变量(也就是 a、b、c)也占⽤ 8 个字节的内存,请看下⾯的演⽰:
#include <stdio.h>
union data{
共用体和结构体的区别
共用体和结构体的区别
在c++中,结构体(struct)和共用体(union)是两种很相似的复合数据类型,都可以用来存储多种数据类型,但是两者还有很大的区别。
结构体
1、结构体的作用
在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流,而是多种数据组合起来的一个整体,其表现形式就是一个结构体。
2、结构体的定义
结构体:是指定义相应的数据结构及相应的变量。
结构体如下所示,
结构体和共用体 注意事项
结构体和共用体注意事项
以结构体和共用体为主题,本文将介绍一些需要注意的事项。结构体和共用体是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、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十章结构体与共用体
一、选择题
1.在说明一个结构体变量时系统分配给它的存储空间是。(0级)
A)该结构体中第一个成员所需存储空间
B)该结构体中最后一个成员所需存储空间
C)该结构体中占用最大存储空间的成员所需存储空间
D)该结构体中所有成员所需存储空间的总和
2.若有以下说明和语句:
struct worker
{ int no; char ﹡name; }work, ﹡p=&work;
则以下引用方式不正确的是。(1级)
A) work.no B) (﹡p).no C) p->no D)work->no
3.有如下定义:
struct date { int year, month, day; };
struct worklist { char name[20]; char sex;
struct date birthday; }person;
对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是。
(1级)
A) year=1958 B) birthday.year=1958
C) person.birthday.year=1958 D) person.year=1958
4.以下对结构体类型变量的定义中不正确的是。(1级)
A)#define STUDENT struct student B) struct student
STUDENT { int num;
{ int num; float age;
float age; }std1; }std1;
C) struct D) struct
{ int num; { int num;
float age; float age; } student;
}std1; struct student std1;
5.设有以下说明语句
struct stu
{ int a; float b; }stutype;
则下面的叙述不正确的是。(1级)
A)struct是结构体类型的关键字
B)struct stu是用户定义的结构体类型
C)stutype是用户定义的结构体类型名
D)a和b都是结构体成员名
6.C语言结构体类型变量在程序执行期间。(0级)
A)所有成员一直驻留在内存中
B)只有一个成员主留在内存中
C)部分成员驻留在内存中
D)没有成员驻留在内存中
7.int类型占4个字节,以下程序的运行结果是。(1级)
# include
main( )
{ struct date
{ int year, month, day; }today;
printf(“%d\n”,sizeof(struct date)); }
A) 6 B) 8 C) 10 D)12
8.有如下定义
struct person{char name[9]; int age;};
struct person class[10]={“Johu”, 17,
“Paul”, 19
“Mary”, 18,
“Adam 16,};
根据上述定义,能输出字母M的语句是。(1级)
A)prinft(“%c\n”,class[3].mane);
B)pfintf(“%c\n”,class[3].name[1]);
C)prinft(“%c\n”,class[2].name[1]);
D)printf(“%^c\n”,class[2].name[0]);
9.设有如下定义
struct ss
{ char name[10];
int age;
char sex;
} std[3],* p=std;
下面各输入语句中错误的是。(1级)
A) scanf("%d",&(*p).age);
B) scanf("%s",&);
C) scanf("%c",&std[0].sex);
D) scanf("%c",&(p->sex))
10.设有以下说明语句,则下面的叙述中不正确的是。(1级)
struct ex {
int x ; float y; char z ;
} example;
A) struct结构体类型的关键字B) example是结构体类型名
C) x,y,z都是结构体成员名D) struct ex是结构体类型
11.若程序中有下面的说明和定义:
struct stt
{ int x;
char b;
}
struct stt a1,a2;
则会发生的情况是。(1级)
A)程序将顺利编译、连接、执行。
B)编译出错。
C)能顺利通过编译、连接,但不能执行。
D)能顺利通过编译,但连接出错。
12.已知教师记录定义为:
struct student
{ int no;
char name[30];
struct
{ unsigned int year;
unsigned int month;
unsigned int day;
}birthday;
} stu;
struct student *t = &stu;
若要把变量t中的生日赋值为“1980年5月1日”,则正确的赋值方式
为。(1级)
A) year = 1980; B) t.year = 1980;
month = 5; t.month = 5;
day = 1; t.day = 1;
C) t.birthday.year = 1980; D) t-> birthday.year = 1980;
t.birthday.month = 5; t-> birthday.month = 5;
t.birthday.day = 1; t-> birthday.day = 1;
13.以下结构类型可用来构造链表的是。(1级)
A)struct aa{ int a;int * b;};
B)struct bb{ int a;struct bb * b;};
C)struct cc{ int * a;cc b;};
D)struct dd{ int * a;aa b;};
二、填空题
1.有如下定义:(1级)
struct {int x; int y; }s[2]={{1,2},{3,4}}, ﹡p=s;
则:表达式++p->x 的结果是。
表达式++p->x 的结果是。
2.若有定义:(2级)
struct num {int a; int b; float f; }n={1, 3, 5.0}};
struct num ﹡pn=&n;
则表达式pn->b/n.a﹡++pn->b的值是,表达式(﹡pn).a+pn->f的值是。
3.若要使指针p指向一个double类型的动态存储单元,请填空。(1级)
p= malloc(sizeof(double));
4.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是。
(1级)
Struct stud
{ char num[6];
int s[4];
double ave;