首页 第23讲 结构体类型的变量、数组、指针、函数

第23讲 结构体类型的变量、数组、指针、函数

举报
开通vip

第23讲 结构体类型的变量、数组、指针、函数null第讲第讲结构体类型的变量、数组、指针、函数第十一章 结构体与共用体第十一章 结构体与共用体11.1 结构体类型 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 一、结构体类型的定义struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };成员类型可以是 基本型或构造型struct是关键字, 不能省略合法标识符 可省:无名结构体例:结构体类型的定义例 stru...

第23讲 结构体类型的变量、数组、指针、函数
null第讲第讲结构体类型的变量、数组、指针、函数第十一章 结构体与共用体第十一章 结构体与共用体11.1 结构体类型 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据类型 一、结构体类型的定义struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };成员类型可以是 基本型或构造型struct是关键字, 不能省略合法标识符 可省:无名结构体例:结构体类型的定义例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; 结构体类型定义只描述结构 的组织形式,不分配内存。结构体类型定义的作用域与变量的作用域类似,若将类型定义放在某个函数内,则只能在该函数内定义这种结构体类型的变量。例:结构体类型的定义二、结构体变量的定义二、结构体变量的定义struct 结构体名 {类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 变量名表列;例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; struct student stu1,stu2; 例 #define STUDENT struct student STUDENT { int num; char name[20]; char sex; int age; float score; char addr[30]; }; STUDENT stu1,stu2; 1. 先定义结构体类型,再定义结构体变量 一般形式: 2. 定义结构体类型的同时定义结构体变量2. 定义结构体类型的同时定义结构体变量struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; 一般形式:3. 直接定义结构体变量一般形式:struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;例 struct { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2; 用无名结构体直接定义 变量只能一次3. 直接定义结构体变量说明:结构体类型与结构体变量概念不同。 类型:不分配内存; 变量:分配内存 类型:不能赋值、存取、运算; 变量:可以 结构体类型可以嵌套定义。 结构体成员名与程序中变量名可相同,不会混淆。 结构体类型及变量的作用域与生存期。说明:三、结构体变量的引用三、结构体变量的引用1. 引用方式: 结构体变量名.成员名2. 引用规则:结构体变量不能整体引用,只能引用变量成员成员(分量)运算符 优先级: 15(最高) 结合性:从左向右3. 结构体嵌套时应逐级引用 4. 结构体变量可以整体赋值给另一个结构体变量3. 结构体嵌套时应逐级引用 4. 结构体变量可以整体赋值给另一个结构体变量例 struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2 ={101,“Wan Lin”};stu1.birthday.month=12;stu1=stu2; (√) stu1={102,“Wan Lin”…}; ()四、结构体变量的初始化 形式一:四、结构体变量的初始化 形式一:struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }; struct 结构体名 结构体变量={初始数据};例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }; struct student stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”};形式二:struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};例 struct student { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; 形式二:形式三:struct { 类型标识符 成员名; 类型标识符 成员名; ……………. }结构体变量={初始数据};例 struct { int num; char name[20]; char sex; int age; char addr[30]; }stu1={112,“Wang Lin”,‘M’,19, “200 Beijing Road”}; 形式三:11.2 结构体数组 一、结构体数组的定义11.2 结构体数组 一、结构体数组的定义形式一: struct student { int num; char name[20]; char sex; int age; }; struct student stu[2];形式二: struct student { int num; char name[20]; char sex; int age; }stu[2];形式三: struct { int num; char name[20]; char sex; int age; }stu[2];二、结构体数组初始化二、结构体数组初始化例:定义类型时省略类型名 struct { int num; char name[20]; char sex; int age; }stu[ ]={{……},{……},{……}};顺序初始化: struct student { int num; char name[20]; char sex; int age; }; struct student stu[ ]={100,“Wang Lin”,‘M’,20, 101,“Li Gang”,‘M’,19, 110,“Liu Yan”,‘F’,19}; 例:定义类型的同时,定义变量并初始化 struct student { int num; char name[20]; char sex; int age; }stu[ ]={{……},{……},{……}};三、结构体数组引用三、结构体数组引用引用方式: 结构体数组名[下标].成员名例 统计后选人选票struct person { char name[20]; int count; }leader[3]={"Li1",0, "Zhang2",0, "Wang3",0}; void main() { int i, j; char leader_name[20]; for(i=1;i<=10;i++) { scanf("%s",leader_name); for(j=0;j<3;j++) if(strcmp(leader_name,leader[j].name)==0) leader[j].count++; } for(i=0;i<3;i++) printf("%5s:%d\n",leader[i].name,leader[i].count); }例 统计后选人选票11.3 指向结构体的指针 一、指向结构体变量的指针11.3 指向结构体的指针 一、指向结构体变量的指针存放结构体变量在内存中的起始地址1. 定义形式:struct 结构体名 *结构体指针名; 例 struct student *p;2. 使用结构体指针变量引用成员2. 使用结构体指针变量引用成员(*结构体指针名).成员名结构体指针名->成员名指向成员运算符 优先级: 15 (最高) 结合方向:从左向右例 指向结构体的指针变量struct student stu1; struct student *p=&stu1; stu1.num=101;  (*p).num=101;  *p->num=101;例 指向结构体的指针变量例 指向结构体的指针变量main() {struct student { long int num; char name[20]; char sex; float score; }stu_1,*p; p=&stu_1; stu_1.num=89101; strcpy(stu_1.name,"Li Lin"); p->sex='M'; p->score=89.5; printf("\nNo:%ld\nname:%s\nsex:%c\nscore:%f\n", (*p).num,p->name,stu_1.sex,p->score); }二、指向结构体数组的指针二、指向结构体数组的指针struct student { int num; char name[20]; char sex; int age; }stu[3]={{10101,"Li Lin",'M',18}, {10102,"Zhang Fun",'M',19}, {10104,"Wang Min",'F',20}}; main() { struct student *p; for(p=stu;pnum,p->name,p->sex,p->age); }例 指向结构体数组的指针11.4 结构体与函数11.4 结构体与函数1. 结构体类型变量可以作为函数实参 struct data { int a, b, c; }; main() { void func(struct data); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c); printf("Call Func()....\n"); func(arg); printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c); } void func(struct data parm) { printf("parm.a=%d parm.b=%d parm.c=%d\n",parm.a,parm.b,parm.c); printf("Process...\n"); parm.a=18; parm.b=5; parm.c=parm.a*parm.b; printf("parm.a=%d parm.b=%d parm.c=%d\n",parm.a,parm.b,parm.c); printf("Return...\n"); }2. 函数可以返回结构体类型的值例11.7 2. 函数可以返回结构体类型的值例11.7 #include #include struct student {char num[10]; char name[20]; float score;}; void PrintStruct(struct student stud) {printf("%s %s %g\n",stud.num,stud.name,stud.score);} struct student InitialStruct(char *num,char *name,float score) {struct student stud; strcpy(stud.num,num); strcpy(stud.name,name); stud.score=score; return stud; } void main() {struct student stud ; stud=InitialStruct("00001","Xiao Li",98.5); PrintStruct(stud); }3. 用结构体指针变量作函数参数struct data { int a, b, c; }; void main() { void func(struct data *parm); struct data arg; arg.a=27; arg.b=3; arg.c=arg.a+arg.b; printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c); printf("Call Func()....\n"); func(&arg); printf("arg.a=%d arg.b=%d arg.c=%d\n",arg.a,arg.b,arg.c); } void func(struct data *parm) { printf("parm->a=%d parm->b=%d parm->c=%d\n",parm->a,parm->b,parm->c); printf("Process...\n"); parm->a=18; parm->b=5; parm->c=parm->a*parm->b; printf("parm->a=%d parm->b=%d parm->c=%d\n",parm->a,parm->b,parm->c); printf("Return...\n"); }3. 用结构体指针变量作函数参数
本文档为【第23讲 结构体类型的变量、数组、指针、函数】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_016768
暂无简介~
格式:ppt
大小:203KB
软件:PowerPoint
页数:0
分类:工学
上传时间:2013-05-23
浏览量:19