第23讲 结构体类型的变量、数组、指针、函数
更新时间:2023-05-31 03:10:01 阅读量: 实用文档 文档下载
结构体类型的变量、数组、指针、函数
第讲结构体类型的变量,数组,指针,函数
结构体类型的变量、数组、指针、函数
第十一章 结构体与共用体11.1 结构体类型结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自 定义数据类型 合法标识符 一,结构体类型的定义 可省:无名结构体struct [结构体名] { 类型标识符 成员名; 类型标识符 成员名; ……………. };
struct是关键字, 不能省略
成员类型可以是 基本型或构造型
结构体类型的变量、数组、指针、函数
例:结构体类型的定义 例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };num 2字节
… …..
name sex age score
20字节 1字节 2字节 4字节
addr
30字节
结构体类型定义的作用域与 变量的作用域类似,若将类 型定义放在某个函数内,则 只能在该函数内定义这种结 构体类型的变量.
结构体类型定义只描述结构 的组织形式,不分配内存.
结构体类型的变量、数组、指针、函数
二,结构体变量的定义
1. 先定义结构体类型,再定义结构体变量一般形式: struct结构体名 {类型标识符 成员名; 类型标识符 成员名; ……………. 例 #define STUDENT struct student }; STUDENT struct 结构体名 变量名表列;
{ int num; 例 struct student char name[20]; { int num; char sex; char name[20]; int age; char sex; float score; int age; char addr[30]; float score; }; char addr[30]; STUDENT stu1,stu2; }; struct student stu1,stu2;
结构体类型的变量、数组、指针、函数
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;
结构体类型的变量、数组、指针、函数
说明: 结构体类型与结构体变量概念不同.类型:不分配内存; 类型:不能赋值,存取,运算; 变量:分配内存 变量:可以
结构体类型可以嵌套定义. 结构体成员名与程序中变量名可相同,不会混淆. 结构体类型及变量的作用域与生存期. 例 struct date 例 struct student { int month; { int day; int num; char name[20]; int year; }; struct date { int month; struct student int { int num; day; int year; char name[20]; }birthday; struct date birthday; }stu; }stu;
num num
birthday name month birthday year day name month day year
结构体类型的变量、数组、指针、函数
三,结构体变量的引用
成员(分量)运算符 优先级: 15(最高) 结合性:从左向右
1. 引用方式: 结构体变量名.成员名 2. 引用规则:结构体变量不能整体引用,只能引用变量成员例 struct student stu1.num=10; { int num; char name[20]; char sex; 例 struct student stu1.score=85.5; if(stu1==stu2) int age; …….. { int num; (×) char name[20]; float sc
ore; stu1.score+=stu2.score; char addr[30]; stu1.age++; char sex; printf("%d,%s,%c,%d,%f,%s\n",stu1); (×) }stu1,stu2; int age; float score; stu1={101,"Wan Lin",'M',19,87.5,"DaLian"}; (×) char addr[30]; }stu1,stu2;
结构体类型的变量、数组、指针、函数
3. 结构体嵌套时应逐级引用 4. 结构体变量可以整体赋值给另一个结构体变量
例 struct student { int num; char name[20]; struct date { int month; int day; int year; }birthday; }stu1,stu2 ={101,"Wan Lin"};
num
birthday name month day year
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 结构体数组 一,结构体数组的定义 形式一: struct student { int 形式二: num; struct char name[20]; student { char num; int sex; 形式三: age; int name[20]; struct char }; char sex; int stu[2]; struct{ studentnum; int age; char name[20]; }stu[2]; sex; char int age; }stu[2];num 25B name sex age num name sex age stu[1] stu[0]
结构体类型的变量、数组、指针、函数
二,结构体数组初始化
例:定义类型时省略类型名 顺序初始化: 例:定义类型的同时,定义变量并初始化 struct student 分行初始化: struct student struct intstudent {{ structintnum; {{ char name[20]; int num; int num; num; char name[20]; char name[20]; char sex; char name[20]; char sex; intchar sex; age; char sex; int age; int age; }stu[ ]={{……},{……},{……}}; int age; }; }stu[ ]={{……},{……},{……}}; struct}; student stu[ ]={100,"Wang Lin",'M',20, struct student stu[ ]={{100,"Wang Lin",'M',20}, 101,"Li Gang",'M',19, {101,"Li Gang",'M',19}, 110,"Liu Yan",'F',19}; {110,"Liu Yan",'F',19}};全部初始化时维数可省
结构体类型的变量、数组、指针、函数
三,结构体数组引用
引用方式: 结构体数组名[下标].成员名
struct student { int num; char name[20]; char sex; int age; }str[3];
stu[1].age++;
strcpy(stu[0].name,"ZhaoDa");
结构体类型的变量、数组、指针、函数
例 统计后选人选票
struct person { char name[20]; int count; }leader[3]={"Li1",0, "Zhang2",0, "Wang3",0}; name void main() Li1 { int i, j; char leader_name[20]; Zhang2 for(i=1;i<=10;i++) Wang3 { 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].nam
e,leader[i].count); }
count 0 0 0
Ch10_2.c
结构体类型的变量、数组、指针、函数
11.3 指向结构体的指针 一,指向结构体变量的指针
存放结构体变量在 内存中的起始地址
1. 定义形式:struct 结构体名 *结构体指针名; 例 struct student *p; struct student { int num; char name[20]; char sex; int age; }stu; struct student *p=&stu;p num name sex age
stu
结构体类型的变量、数组、指针、函数
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_,"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); }
结构体类型的变量、数组、指针、函数
二,指向结构体数组的指针Ch10_4.c
例 指向结构体数组的指针num struct student name { int num; sex char name[20]; age p+1 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;p<stu+3;p++) printf("%d%s%c%d\n",p->num,p->name,p->sex,p->age); } p
stu[0]
stu[1]
stu[2]
结构体类型的变量、数组、指针、函数
11.4 结构体与函数 1. 结构体类型变量可以作为函数实参
Ch10_60.c
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"); }
正在阅读:
人教版高中数学必修1课后习题答案06-26
物理复习提纲完整版(重要) - 图文06-20
湖北省2017年平安福寿两全保险(利差返还型)条款考试试卷04-29
数学知识点版七年级数学上册2.4整式课时提升作业(新版)湘教版[03-18
(第八章)轮机长考证:轮机管理05-14
南京邮电大学通信原理实验实验四 纠错码Hamming码编译码 - 图文03-11
专项经费使用情况说明02-21
基层党组织换届选举材料汇编03-17
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 数组
- 指针
- 变量
- 函数
- 类型
- 结构