结构体与共用体

合集下载

共用体类型,结构体类型

共用体类型,结构体类型

共⽤体类型,结构体类型⽬录

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_结构体-共用体-枚举

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

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

实验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语言学习入门笔记之结构体与共用体

结构体与共用体笔记

定义结构体

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. 在给共用体的成员赋值时,只能对一个成员进行赋值,对其他成员的赋值会改变已经赋值的成员的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档