结构体、共用体及枚举型
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,);
第10章 结构体、共用体、枚举类

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.2struct person{int id;char name[10];}per={1,"123456"};="123456"[0]='1'7.3struct sk{int n;float x;}date,*p;要使p指向date中的n域:p=(struct sk *)&date.n;8 共用体的概念使几个不同的变量共占同一段内存的结构称为“共用体”类型的结构。
C语言数据结构-第9章 结构体共用体与枚举

"Shang Hai","13901000003"}}; int i; for(i=0;i<3;i++) { printf("%s,%d,%s,%s,",stud[i].name,stud[i].age,stud[i].sex,stud[i].xh); printf("%d,%d,%d,",stud[i].birthday.year,stud[i].birthday.month, stud[i].birthday.day); printf("%s,%s,%s\n",stud[i].nation,stud[i].address,stud[i].tel); } }
成员运算符“.”的优先级最高,在表达式中的结构体变量成员不 需要加括号。例如:
wang.age++;
相当于
(wang.age)++;
注意
13
结构体变量的成员名可以相同,但必须处在不同的层次。 例如:
sturct student { int no;
char name[20]; struct { int no; char classname[20]; }class; struct { int no; char groupname[20]; }group; }wang;
定义结构体类型名的同时定义结构体数组,例如:
struct student{…} stud[50];
实验9 结构体、共用体与枚举类型答案

率。 其次,结构体指针作为函数参数:可以在函数中通过该指针引用结 构体,当在函数中修改了结构体的成员变量后,指针所指向的结构体本 身也被改变了。而当结构体变量作为函数参数;在函数中可通过变量直 接使用结构体,但是,如果在函数中修改了结构体的成员变量后,结构 体本身并未发生变化,只是副本被改变。
} } average = s/5 ; printf("平均成绩:%.2f\n",average); }
4、5位职工的月收入如下表所示: 部门 月收入 工号 姓名 (char (float (int num) (char name) department) salary) 技术科 010002 张援朝 6800 生产科 020006 李明瑞 2600 检验科 030018 王国庆 4800 后勤部 040026 刘小兵 3700 经营科 050068 吴 伟 1900 试编程求这5位职工的平均月收入,并输出月收入小于3000元的职 工的部门、工号、姓名与月收入等信息。源程序以ex9_8.c命名,保存 在自己的文件夹内。
保存在自己的文件夹内。
解: #include <stdio.h> struct bookinfo { char isbn[20]; char title[50]; char author[20]; char publisher[50]; char pubdate[30]; float price; }book[5] = {{"7115177810","Java实用教程","李钟 尉","人民邮电出版社","2008年5月",32.00}, {"7113101015","汇编语言程序设计","白小明","中国铁 道出版社","2009年8月",35.00}, {"7302108535","C语言程序设计","谭浩强","清华大学 出版社","2005年7月",26.00}, {"7301123713","网络工程实用教程","汪新民","北京大 学出版社","2008年2月",34.00}, {"7111283812","软件工程概论","郑人杰","机械工业出 版社","2010年3月",28.00}}; main() { int i; float average, s=0; for(i=0; i<5; i++) { s += book[i].price; if(book[i].price<30.00) { printf("书号:%s ",book[i].isbn); printf("书名:%s ",book[i].title);
c语言中各种数据类型

c语言中各种数据类型C语言中的各种数据类型在C语言中,数据类型是非常重要的概念。
它定义了变量的类型及其在内存中所占据的空间大小。
C语言中有多种数据类型,包括基本数据类型和派生数据类型。
本文将依次介绍这些数据类型,并给出一些使用示例。
1. 基本数据类型1.1 整型(int)整型是C语言中最常用的数据类型之一。
它用于表示整数,包括正整数、负整数和零。
整型的大小取决于机器的架构,但通常情况下,int类型占用4个字节的内存空间。
下面是一个整型变量的声明和赋值的示例:```int num = 10;```1.2 浮点型(float和double)浮点型用于表示实数,包括小数和指数形式的数。
C语言中提供了两种浮点型:float和double。
float类型占用4个字节的内存空间,而double类型则占用8个字节的内存空间。
下面是一个浮点型变量的声明和赋值的示例:```float pi = 3.14;double e = 2.71828;```1.3 字符型(char)字符型用于表示单个字符,它占用1个字节的内存空间。
在C语言中,字符型变量使用单引号来表示。
下面是一个字符型变量的声明和赋值的示例:```char ch = 'A';```2. 派生数据类型2.1 数组(array)数组是一种派生数据类型,它可以存储多个相同类型的元素。
数组的大小在声明时指定,并且在程序运行期间不能改变。
下面是一个整型数组的声明和赋值的示例:```int nums[5] = {1, 2, 3, 4, 5};```2.2 结构体(struct)结构体是一种可以包含多个不同类型变量的数据类型。
它可以将不同类型的变量组合在一起,形成一个逻辑上的整体。
下面是一个结构体的声明和使用的示例:```struct Student {char name[20];int age;float score;};struct Student stu;strcpy(, "Alice");stu.age = 18;stu.score = 95.5;```2.3 枚举(enum)枚举是一种用户自定义的数据类型,它可以定义一组具有名称的常量。
C语言中的组合数据类型

C语言中的组合数据类型在C语言中,组合数据类型是一种非常重要的概念。
它允许我们将多个不同类型的数据组合在一起,形成一个新的数据类型,以方便我们对这些数据进行管理和操作。
本文将详细介绍C语言中的组合数据类型,并探讨其在实际应用中的作用和用法。
一、结构体(Structures)结构体是C语言中最基本的组合数据类型之一。
它允许我们将不同类型的数据按照一个特定的结构组织在一起。
结构体由多个成员变量组成,每个成员变量可以是任意类型的数据。
通过使用结构体,我们可以方便地描述和处理一些具有复杂结构的数据。
C语言中定义结构体的语法如下:```struct 结构体名 {类型成员变量1;类型成员变量2;类型成员变量3;...};```例如,我们可以定义一个表示学生信息的结构体:```struct Student {int id;char name[20];int age;float score;};```在上面的例子中,我们定义了一个名为Student的结构体,它有四个成员变量,分别表示学生的学号、姓名、年龄和成绩。
使用结构体时,我们可以通过结构体名加成员变量名的方式来访问和操作结构体的数据。
例如,要输出学生的姓名,可以使用以下代码:```struct Student stu;strcpy(, "John");printf("Name: %s\n", );```通过结构体,我们可以方便地对复杂的数据进行整体操作,并且可以自定义多个结构体,以满足不同的需求。
二、共用体(Unions)共用体是C语言中另一种重要的组合数据类型。
它允许在同一块内存空间中存储不同类型的数据,但同一时间只能存储其中一种类型的数据。
共用体帮助我们节省了内存空间,更加灵活地处理数据。
C语言中定义共用体的语法如下:```union 共用体名 {类型成员变量1;类型成员变量2;类型成员变量3;...};```例如,我们可以定义一个表示不同数据类型的共用体:```union Data {int i;float f;char str[20];};```在上面的例子中,我们定义了一个名为Data的共用体,它有三个成员变量,分别是整型变量i、浮点型变量f和字符数组str。
C语言第9章结构体、共用体、枚举

结构体变量.成员
struct date { int year;
int month; int day;
“.”是成员运算符, 优先级最高
printf("%d,%d,%d",birth);
printf("%d,%d,%d",birth.year,
}; struct date birth;
birth.month,birth.day);
scanf("%f",&student2.score[2])7; 8
student2
结构变量的整体赋值 student3 = student2;
02 Zhang Zi Liang 88 78
student3
02 Zhang Zi Liang 88 78
湖南工业大学计算机与通信学院
例9-1学生的基本信息包括学号、姓名、3门成绩、平均分、总分。输入一 个学生的前3项基本信息,计算平均分和总分并输出。
湖南工业大学计算机与通信学院
9.1 问题的提出
又如,在学生信息管理系统中填 加个属性:是否是中共党员,如 果不是属性的值为0(int),如
果是属性的值为入党的时间 (char)。在某一时间,属性只有 一种值,而且数据类型不同,这 种情况用什么数据类型描述呢?
对于这种应用,C语言引入了共用体类型。
共用体是一种同一存储区域由不同类型变量共享的数据 类型,它提供—种方法能在同一存储区中操作不同类型 的数据,也就是说共用体采用的是覆盖存储技术,准许 不同类型数据互相覆盖。
基本数据类型并不能方便地解决所有问题
❖ 复合数据类型是基本数据类型迭代派生而来
典型的代表就是“结构”,数组、指针也可算作此类
C语言知识总结——宏,枚举,结构体,共用体

C语言知识总结——宏,枚举,结构体,共用体1、define宏定义以#号开头的都是编译预处理指令,它们不是C语言的成分,但是C程序离不开它们,#define用来定义一个宏,程序在预处理阶段将用define定义的来内容进行了替换。
因此在程序运行时,常量表中并没有用define定义的常量,系统不为它分配内存。
define定义的常量,预处理时只是直接进行了替换,,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。
,因此在编译时它不对宏的定义进行检查,作用域不影响对常量的访问。
它的常量值只能是字符串或数字。
该命令有两种格式:一种是简单的常量宏定义, 另一种是带参数的宏定义。
不带参数的宏:#define< 名字 >< 值 > 要注意,没有结尾的分号,因为不是C的语句,名字必须是一个单词,值可以是各种东西,宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。
如有错误,只能在编译已被宏展开后的源程序时发现。
注意.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。
宏定义其作用域为宏定义命令起到源程序结束。
如要终止其作用域可使用#undef命令带参数的宏:像函数的宏,一般的定义形式:带参宏定义的一般形式为:「#define 宏名」(形参表)字符串,也是没有结尾的分号,可以带多个参数,#define NB(a,b)((a)>(b)?(b):(a)), 也可以组合(嵌套)使用其他宏,注意带参数宏的原则一切都要有括号,参数出现的每个地方都要有括号。
带参数的宏在大型的程序的代码中使用非常普遍,在#和##这两个运算符的帮助下可以很复杂,如“产生函数”,但是有些宏会被inline函数代替(C++的函数)使用宏好处:“提高运行效”。
定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。
第9章 结构体、共用体和枚举类型

9.1 结构体类型与结构体变量 9.2 结构体数组 9.3 向函数传递结构体型数据 9.4 链表 9.5 共用体 9.6 枚举类型 9.7 用户自定义类型
9.1 结构体类型与结构体变量
• 结构体类型的定义
–概述:
• 建立单链表的主要步骤为:
– 生成只含有头结点的空链表; – 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 – 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式, 分为在表尾插入的方法和在表头插入的方法。 •表尾插入: 例9.6 •表头插入: 例9.7
• 共用体变量的定义
–用已定义的共用体类型去定义共用体变量 –定义共用体类型的同时定义变量: –定义无名共用体类型的同时定义变量:
• 共用体变量的引用
–引用方式:共用体变量名.成员名 共用体变量名. 共用体变量名 –说明: 对于共用体变量,只能引用它的成员,而不能引用整个 共用体变量。若共用体的成员是构造类型的,则需要逐级引 用至最低级的成员。 –能通过定义指向共用体的指针变量来引用共用体变量。
在实际应用中,一组相关的数据可能是不同类型的。C语 言提供了包含不同类型成员的类型来定义这样的数据,这 种类型就是结构体类型 结构体类型。 结构体类型
– 定义形式:
struct 结构体名 类型名1 成员名1 {类型名1 成员名1; 类型名2 成员名2 类型名2 成员名2; …… 类型名n 成员名n 类型名n 成员名n; };
• 举例
例9.11 上一页
9.6 枚举类型
• 枚举类型的定义–定义来自式:enum 枚举类型名{枚举常量1,枚举常量2,……,枚举常量n}; •
c语言允许的数据类型

c语言允许的数据类型C语言允许的数据类型在C语言中,数据类型是用来定义变量或函数返回值的属性。
C语言中允许的数据类型包括基本数据类型和派生数据类型。
本文将详细介绍C语言允许的数据类型及其特点。
1. 基本数据类型1.1 整型(int)整型是C语言中最基本的数据类型之一,用于表示整数。
整型可以分为有符号整型和无符号整型。
有符号整型可以表示正数、负数和零,而无符号整型只能表示非负数和零。
整型的大小取决于编译器和操作系统,但一般情况下,int类型占用4个字节。
1.2 浮点型(float和double)浮点型用于表示带有小数点的数值。
C语言中提供了两种浮点型数据类型:float和double。
float类型占用4个字节,而double类型占用8个字节。
double类型的精度比float类型更高,可以表示更大范围的数值。
1.3 字符型(char)字符型用于表示单个字符。
在C语言中,字符型变量通常占用1个字节。
字符型可以表示ASCII码、字母、数字、符号等各种字符。
2.1 数组(array)数组是由相同类型的元素组成的集合。
在C语言中,数组可以存储多个元素,并通过下标来访问各个元素。
数组的大小在定义时确定,并且不可改变。
2.2 指针(pointer)指针是用于存储内存地址的变量。
通过指针,可以间接访问存储在内存中的数据。
指针在C语言中非常重要,它可以用于动态分配内存、传递函数参数等。
2.3 结构体(struct)结构体是由不同类型的变量组成的集合。
在C语言中,结构体可以用来表示复杂的数据结构。
通过结构体,可以将多个不同类型的变量组织在一起,形成一个逻辑上的整体。
2.4 共用体(union)共用体是一种特殊的数据类型,可以在相同的内存位置存储不同的数据类型。
共用体的大小取决于最大的成员变量的大小。
2.5 枚举(enum)枚举用于定义一组命名的常量。
通过枚举,可以为一组相关的常量赋予有意义的名称,提高代码的可读性。
结构体共用体与枚举课后习题

结构体共用体与枚举课后习题1.定义一结构体,成员项包括一个字符型、一个整型。
编程实现结构体变量成员项的输入、输出,并通过说明指针引用该变量。
#includevoidmain(){tructa{charb;intc;}d,某p;p=&d;printf(\输入:\\n\canf(\canf(\printf(\输出:\\n\printf(\printf(\}2.建立一结构体,其中包括学生的姓名、性别、年龄和一门课程的成绩。
建立的结构体数组通过输入存放全班(最多45人)学生信息,输出考分最高的同学的姓名、性别、年龄和课程的成绩。
#includevoidmain(){inti,b,n;floata;printf(\请输入班级的人数:\canf(\getchar();tructperon{charname[20];chare某[10];intyear;floatcore;}tu[45];for(i=0;igetchar();}for(b=0,a=tu[0].core,i=0;i3.已知一个班有45人,本学期有两门课程的成绩,求:说明:要求定义结构体,第一成员项为学生姓名,第二成员项为学号,另外两个成员项为两门课成绩,并要求分别用函数完成。
(本人注:由于人数太多,故改为4人)#include#defineN4tructperon{charname[20];longintnumber;floatcore 1;floatcore2;};voidhuru(tructperontu[N]){inti;for(i=0;ivoidzuigao(tructperontu[N]){intb,i;floata;for(b=0,a=tu[0].core1,i=0;ivoidpingjun(tructperontu[N]){inti;float1,2,p1,p2;for(1=0,2=0,i=0;ivoidpai某u(tructperontu[N]){inti,j;tructperont;for(i=0;ivoidmain(){tructperontu[N];huru(tu);printf(\zuigao(tu);pingj un(tu);pai某u(tu);}4.输入一字符串,用链表形式储存,每个结点的数据域存放一个字符,最后输出链表中的全部字符。
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语言:结构体、共用体、枚举、类型重定义、位运算、预处理C语言除了提供象int,long,float,double、和char这样的基本数据类型之外,还支持数组、Struct、Union、和Enum数据类型。
结构体类型(struct)我们一个数组包含多个成员(元素),每个成员具有相同的数据类型。
一个结构体也能包含多个成员,但每个成员的数据类型可以不同。
例如:(a) struct Student { char Name[10], char Sex, int Age ;float Height; }(b) struct Student S1;这里,(a)定义了struct类型Student,而(b)定义了S1是Student类型的变量。
Student类型包含四个成员:Name,Sex,Age,Height,它们的数据类型分别是字符数组、字符型、整型、和浮点型。
以下是另一例子:struct DATE { int YEAR; int MONTH, int DAY ;}struct DATE d1,d2;注意,struct类型是泛指,而Student和DATE是两个特定的结构体类型。
当定义一结构体类型时,你要指定它的结构体类型名,当定义变量时,要同时写上关键字struct和结构体类型名。
定义结构体类型:我们struct 结构体类型名 { 成员1;成员2;…;成员n; }每一个成员可以是基本类型的变量、数组或指针变量,也可以是其他结构体或共用体类型的变量、数组或指针。
成员虽然不能是本结构体类型的变量,但可以是本结构体类型的指针变量。
定义结构体类型的变量:struct 结构体类型名变量名1,变量名2,…定义结构体变量时也可初始化,如:struct Student S1,S2={ “Zhang San”, ‟M‟, 19, 1.76 },S3;引用结构体类型的变量:(1)引用其成员:结构体变量名。
成员如 strcpy(,”Li Si”); S1.Sex=‟F‟; S1.Age=18; S1.Height=1.72;[0]=‟L‟; [1]=‟i‟; [2]=‟u‟; [3]=‟\0‟;S2.Height = S1.Height + 0.01 ;(1)引用整体就用变量的名字。
结构体(VC++第7章wu)

struct s { static int id; int eng; }; int s::id=50; s s1; void main() { s s2,s3; cout<<“s1.id=“<<s1.id<<"\n"; S1.id = 50 S2.id = 200 S1.id = 200 S3.id = 400 S2.id = 400 //对静态成员进行定义性说明,并初始化。
for(int i=0;i<3;i++) cout<<r[i].id<<"\t"<<r[i].eng<<"\t"<<r [i].math<<"\n";
for(i=0;i<2;i++) cout<<rr[i].id<<"\t"<<rr[i].eng<<"\t"< <rr[i].math<<"\n";
Page 13
S1.id = 400
Page 15
共用体(联合体)
• 定义形式:
union 共用体名 { 数据类型 ; 数据类型 ; : 数据类型 ; }; 成员名 1 成员名 2 •共用体变量各成员合用同一 起始地址开始的内存 •共用体变量所占内存为占内 存最多的成员所占用内存 •共用体变量不可初始化 •在任一时刻,在一个共用体 变量内,只有一个成员起作 用
结构体类型的静态成员
• 在定义结构体的成员时,不能指定成员的存储 类型为auto、register、extern,但可指定成 员的存储类型为static. • 若结构体类型中某个成员定义为static存储类 型,表示对于这种结构体类型的所有变量,系 统为该成员只分配一个存储空间。 • 例:
C语言 第八章 结构体

共用体
3)直接定义联合变量 union {
int i;
float f; }num; 说明:(1)共用体变量的所有成员占有同一段内存,所占内存空 间是其成员中字节数最大的成员占有的字节数。
(2)共用体变量中可以定义许多不同类型的成员,但同一时刻只
有一个成员的数据有效。
共用体
4.共用体变量初始化 初始化时,只能对第一个成员的数据类型初始化。 例:union data num={10}; 正确 union data num={10,25.4}; 错误
结构体变量
方法三:定义结构体类型的同时定义结构体变量,省略结构体类型名
struct DATE{ int year; int month; int day;}; struct {
long int number;
char name[8]; int age;
char *sex;
struct DATE birthday; }stu1,stu2;
数据类型
数据类型
成员名1;
成员名2;
//成员表
……
};
结构体类型
2.结构体类型的定义: 说明: (1) struct是关键字,标识一个结构体类型定义的开头 (2)“结构体类型名”是表示该结构体类型的名称的标识符,可
类比int、char
(3)“成员表”是构成结构体类型的成份,由一个或多个成员构
成,每个成员有自己的成员名。各成员数据类型可以不同,既可以
枚举类型
3.枚举变量定义
方式一:类型和变量分开定义 enum WEEKDAY{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//定义枚举类型 enum WEEKDAY w;//定义枚举变量w
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
结构体共用体枚举
目录
§1 结构体
§2 结构数组
§3 结构指针
§4 结构与函数
§5 共用体
§6 枚举
§7 用typedef定义类型
结构体的组成
wang20 F 10#222
Zhang 19 M 16#321
定义一个通讯录结构* * *
变量完全相同。
main ( ) { char str[20];struct date
{ int
year, month, day; } today; /*结构变量名*/ 举例分析
struct xs
{ unsigned xh;
char *xm;
char xb;
float sx;
} li1=
{1202,“Liming”,’m’,85.5}; main( ) {……}
对静态存储的结构体
变量初始化,其定义
可放
在函数体内
作为结
;
作为数组元素的
基
是一个数组,数组中的每一
都是结构类型。
说明结构数组的方法是:先定义一个结构,然后用结构类型说明一个数组变量。
举例分析为记录100个人的基本情况。
可以说明一个有100个元素的数组。
每个元素的基类型为一个结构,在说明数组时可以写成:
struct person man [ 100 ];
确定的列
体结构,
访问结构数组中
又要遵守
访问
例:struct xs
{ unsigned xh;...... };
struct xs xscj[3]={{…},{…},{…}};
或:struct xs
{ unsigned xh;......
} xscj[3]={{…},{…},{…
}};
二、结构体数组的初始化
课堂作业根据下面定义,能打印出字母M的语句是:
struct person{ char name[9]; int age; };
struct person class[10]={ “W a n g”, 17,
“Z h a n g”,19,
“M i n g”, 18,
结构指针:存放结构类型数据的首地址,该指针可以指§3 结构指针
§3结构指针
一、指向结构变量的指针
main( )
{ struct {"04",90,80}};struct xscj { char *xh;
课堂作业有以下定义语句,则值为6的表达式是:
struct s
{ int k1;
struct s *k2;
};
static struct s a[3]={ 5,&a[1] ,7,&a[2] , 9 ,’\0’}, *ptr; ptr=&a[0];
§4 结构与函数§4 结构与函数
结构在函数间的传递有
三种传递方式
1. 结构成员作为函数的参数传递
2. 结构整体作为函数的参数传递
3. 结构指针作为函数的参数传递
函数参数可以是:常数、变量、数组、指针、字符
也可以是:结构体(传送成批数据)
传递方法:虚实结合、返回值、全局变量
合
一、结构成员的传递
float x,y; main( )
{struct
int i;
总结。