




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1请将您的手机铃声请将您的手机铃声设置为振动设置为振动2作业作业&实验报告实验报告3复习回顾复习回顾v指针与字符串指针与字符串v数组指针数组指针v指针数组指针数组v函数指针函数指针v多级指针多级指针4字符串表示形式字符串表示形式指针与字符串指针与字符串用字符指针实现用字符指针实现用字符数组实现用字符数组实现例:例:char name20=abcd;例:例:char *name=abcd;5 char str20; 与与 char *cp;str由若干单元组成,每单元存一个字符由若干单元组成,每单元存一个字符cp中存放字符串首地址中存放字符串首地址str是地址常量;是地址常量;cp是地址
2、变量是地址变量 char str20; str=I love China!; ( ) char *cp; cp=I love China!; ( )小小 结结6aa+1a+2int a34;a0a1a2200020082016200020082016a00a01a10a11a20a21a02a03a12a13a22a23例:例:二维数组二维数组7对二维数组对二维数组 int aij,有有a:二维数组的首地址,即二维数组的首地址,即第第0行行的首地址的首地址a+i:第第i行行的首地址的首地址ai*(a+i):第第i行第行第0列列的元素地址的元素地址*(ai+j) *(*(a+i)+j) aij为
3、数组为数组元素元素注意:注意:指针与二维数组指针与二维数组a+i&ai:第第i行行首地址首地址ai*(a+i)&ai0:第第i行第行第0列列元素地址元素地址8数组指针数组指针例如:例如:int (*p)3;p的值是一维数组的的值是一维数组的首地址,首地址,p是是行指针行指针a00a01a10a11a02a12pp+1一维数组指针变量一维数组指针变量维数维数和和二维数组的二维数组的列数列数必须相同必须相同9二维数组名是一个二维数组名是一个地址常量地址常量p=a+i 使使p指向二维数组的第指向二维数组的第i行行*(*(p+i)+j) aij 二维数组形参实际上是一维数组指针变量二维
4、数组形参实际上是一维数组指针变量 即即 int p 10 int (*p)10系统给系统给p分配能保存一个指针值的内存区分配能保存一个指针值的内存区 (2字节字节);而给;而给a分配分配2*5*10字节的内存区字节的内存区int a510 与与 int (*p)10;小小 结结10赋值与初始化:赋值与初始化:指针数组指针数组定义:定义:数组中的元素为指针变量数组中的元素为指针变量形式:形式:数据类型数据类型 *数组名数组名数组长度数组长度;例子:例子:int *p4;初始化初始化: :main() int b23, int *p =b0,b1; .b00b01b10b11b02b12b0b11
5、2345611 函数指针:函数指针:指向函数入口地址的指针变量指向函数入口地址的指针变量定义形式:定义形式:数据类型数据类型 (*指针变量名指针变量名)( );例子:例子:int (*p)( );函数指针函数指针说明:说明:赋值赋值: 调用时将函数名赋值给指针变量调用时将函数名赋值给指针变量例:例:p=max;12 函数指针:函数指针:指向函数入口地址的指针变量指向函数入口地址的指针变量定义形式:定义形式:数据类型数据类型 (*指针变量名指针变量名)( );例子:例子:int (*p)( );函数指针函数指针说明:说明:赋值赋值: 调用时将函数名赋值给指针变量调用时将函数名赋值给指针变量调用调
6、用: c=max(a,b);c=(*p)(a,b)c=p(a,b)对函数指针变量对函数指针变量p n, p+, p-无意义无意义13例子:例子:char *pp, *p, ch=A; p=&ch; pp=&p; 概念:概念:指向指针的指针指向指针的指针 &p&chApppch多级指针多级指针定义:定义:类型标识符类型标识符 * * *指针变量名;指针变量名;注意:注意:* *的个数代表级数的个数代表级数14多级指针多级指针MathEnglishData structureCInternetcourse0course1course2course3course4pc
7、har *course5=Math,English,Data structure,C, Internet, *p=course;15结结 构构 体体学号学号姓名姓名性别性别分数分数010031010031张方张方女女8989010032010032李冰李冰男男7070010033010033王小王小男男8080010060010060王飞王飞男男797916结构体类型定义结构体类型定义struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;成员类型可以是成员类型可以是基本型基本型或或构造型构造型struct是是关键关键字字, ,不能省
8、略不能省略合法标合法标识符可识符可以省略以省略17struct student int num; char name20; char sex; int age; float score; char addr30; 1namenumsexagescoreaddr2220430.结构体类型的定义描述了该结构体类型的定义描述了该结构的组织形式结构的组织形式,不分配内存不分配内存例例 子子18结构体变量定义结构体变量定义先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量struct 结构体名结构体名 类型标识符类型标识符 成员名成员名; 类型标识符类型标识符 成员名成员名; . .;
9、struct 结构体名结构体名 变量名变量名;struct stu int num; char name20; char sex; int age; float score; char addr30; struct stu stu1,stu2; 19结构体变量定义结构体变量定义先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量定义结构体类型的同时定义结构体变量定义结构体类型的同时定义结构体变量struct 结构体名结构体名 类型标识符类型标识符 成员名成员名; 类型标识符类型标识符 成员名成员名; .变量名表列;变量名表列;struct student int num; ch
10、ar name20; char sex; int age; float score; char addr30;stu1,stu2; 20结构体变量定义直接定义结构体变量直接定义结构体变量struct 类型标识符类型标识符 成员名成员名; 类型标识符类型标识符 成员名成员名; .变量名表列;变量名表列;struct int num; char name20; char sex; int age; float score; char addr30;stu1,stu2; 结构体变量定义结构体变量定义先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量定义结构体类型的同时定义结构体变量
11、定义结构体类型的同时定义结构体变量21小结小结结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同类型类型: :不分配内存,不能赋值、存取、运算不分配内存,不能赋值、存取、运算; 变量变量: :分配内存,可分配内存,可进行赋值、存取、运算进行赋值、存取、运算; 结构体可以嵌套结构体可以嵌套numnamebirthdaymonthdayyear22struct date int month; int day; int year;struct student int num; char name20; struct date birthday;stu;例例 结构体的嵌套结构体的嵌套23st
12、ruct student int num; char name20; struct date int month; int day; int year; birthday;stu;例例 结构体的嵌套结构体的嵌套24结构体成员名与程序中变量名可相同结构体成员名与程序中变量名可相同struct student int num; char name20;stu;int num;小结小结结构体类型与结构体变量概念不同结构体类型与结构体变量概念不同类型类型: :不分配内存,不能赋值、存取、运算不分配内存,不能赋值、存取、运算; 变量变量: :分配内存,可分配内存,可进行赋值、存取、运算进行赋值、存取、运
13、算; 结构体可以嵌套结构体可以嵌套25结构体变量的引用结构体变量的引用规则:规则:结构体变量结构体变量不能整体引用不能整体引用,只能引用只能引用 变量变量成员成员方式:方式:结构体变量名结构体变量名.成员名成员名struct student int num; char name20; char sex; int age; float score; char addr30;stu1,stu2; stu1.num=10;stu1.age+=stu2.age;26结构体变量之间可以相互赋值结构体变量之间可以相互赋值说明:说明:struct student int num; char name20;
14、char sex;stu1,stu2; stu2=stu1; 结构体变量的引用结构体变量的引用规则:规则:结构体变量结构体变量不能整体引用不能整体引用,只能引用只能引用 变量变量成员成员方式:方式:结构体变量名结构体变量名.成员名成员名27结构体嵌套时只能逐级引用结构体嵌套时只能逐级引用结构体变量之间可以相互赋值结构体变量之间可以相互赋值说明:说明:结构体变量的引用结构体变量的引用规则:规则:结构体变量结构体变量不能整体引用不能整体引用,只能引用只能引用 变量变量成员成员方式:方式:结构体变量名结构体变量名.成员名成员名28struct student int num; char name20
15、; struct date int month; int day; int year; birthday;stu1,stu2;例例 结构体嵌套时变量的引用结构体嵌套时变量的引用stu1.birthday.month=12;29结构体变量的初始化结构体变量的初始化struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .;struct 结构体名结构体名 结构体变量结构体变量=初始数据初始数据;struct student int num; char name20; int age; struct student stu1=112,Linda
16、, 19;30结构体变量的初始化结构体变量的初始化struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .结构体变量结构体变量=初始数据初始数据;struct student int num; char name20; int age;stu1=112,Linda, 19;31结构体变量的初始化结构体变量的初始化struct 类型标识符类型标识符 成员名;成员名; 类型标识符类型标识符 成员名;成员名; .结构体变量结构体变量=初始数据初始数据;struct int num; char name20; int age;stu1=112,
17、Linda, 19;32结构体数组结构体数组形式一形式一: : struct student int num; char name20; char sex; int age;struct student stu2;numnamesexagenumnamesexagestu0stu125B33形式二形式二: :struct student int num; char name20; char sex; int age;stu2;结构体数组结构体数组numnamesexagenumnamesexagestu0stu125B34形式三形式三:struct int num; char name20;
18、char sex; int age;stu2;结构体数组结构体数组numnamesexagenumnamesexagestu0stu125B35结构体数组初始化结构体数组初始化分行初始化分行初始化: : struct student int num; char name20; int age;struct student stu =100,Wan Lin, 20, 101,Li Gang, 19, 110,Liu Yan, 19; 全部初始化时维数可省全部初始化时维数可省36结构体数组的引用结构体数组的引用引用方式:引用方式:结构体数组名结构体数组名下标下标.成员名成员名 struct stu
19、dent int num; char name20; int age;stu3;stu1.age+; strcpy(,John);37例例 统计候选人选票统计候选人选票struct person char name20; int count;t3=Li,0, Wen,0, Wang,0; main() int i,j; char name20; for(i=1;i=10;i+) scanf(%s,name); for(j=0;j3;j+) if(strcmp(name,)=0) tj.count+; for(i=0;i成员名成员名变量名变量名. .成员名成员名(
20、*p).nump-numstu1.num41例例 输出学生成绩输出学生成绩main() struct student long int num; char name20; 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:%ldnname:%snsex:%cnscore:%fn, (*p).num,p-name,stu_1.sex,p-score);42指向结构体数组的指针指向结构体数组的指针#i
21、nclude stdio.hstruct student char name20; char sex; int age;stu3=Li Lin,M,18, Zhang Fun,M,19, Wang Min,F,20;void main() struct student *p; for(p=stu;pname,p-sex,p-age);43设设: struct num int x ; int y ; sa = 2 , 32 , 8 , 6 ; struct num * *p=sa ;求求p- -y / sa1.x * * +p- - x的值的值课堂练习课堂练习44sa:sa0.x sa0.y s
22、a1.x sa1.y sa0 sa123286设设: struct num int x ; int y ; sa = 2 , 32 , 8 , 6 ; struct num * *p=sa ; 32 8 2 3求求p- -y / sa1.x * * +p- - x的值的值答案答案: 1245用结构体变量的成员作参数用结构体变量的成员作参数结构体作函数参数结构体作函数参数值传递值传递地址传递地址传递多值传递多值传递用指向结构体变量指针作参数用指向结构体变量指针作参数用结构体变量作参数用结构体变量作参数46#include stdio.hstruct data int a, b, c; ;void
23、 func(struct data p) p.a=18; p.b=5; p.c=p.a*p.b; printf(%d %d %dn,p.a,p.b,p.c);void main() struct data m; m.a=27; m.b=3; m.c=m.a+m.b; printf(%d %d %dn,m.a,m.b,m.c); func(m); printf(%d %d %dn,m.a,m.b,m.c);例例 用结构体变量作参数用结构体变量作参数ma:27b: 3c:30(main)#include stdio.hstruct data int a, b, c; ;void func(stru
24、ct data p) p.a=18; p.b=5; p.c=p.a*p.b; printf(%d %d %dn,p.a,p.b,p.c);void main() struct data m; m.a=27; m.b=3; m.c=m.a+m.b; printf(%d %d %dn,m.a,m.b,m.c); func(m); printf(%d %d %dn,m.a,m.b,m.c);47例例 用结构体变量作参数用结构体变量作参数m(main)(func)pa:27b: 3c:30a:27b: 3c:30#include stdio.hstruct data int a, b, c; ;voi
25、d func(struct data p) p.a=18; p.b=5; p.c=p.a*p.b; printf(%d %d %dn,p.a,p.b,p.c);void main() struct data m; m.a=27; m.b=3; m.c=m.a+m.b; printf(%d %d %dn,m.a,m.b,m.c); func(m); printf(%d %d %dn,m.a,m.b,m.c);48例例 用结构体变量作参数用结构体变量作参数m(func)pa:18b: 5c:90a:27b: 3c:30(main)#include stdio.hstruct data int a,
26、 b, c; ;void func(struct data p) p.a=18; p.b=5; p.c=p.a*p.b; printf(%d %d %dn,p.a,p.b,p.c);void main() struct data m; m.a=27; m.b=3; m.c=m.a+m.b; printf(%d %d %dn,m.a,m.b,m.c); func(m); printf(%d %d %dn,m.a,m.b,m.c);49例例 用结构体变量作参数用结构体变量作参数ma:27b: 3c:30(main)#include stdio.hstruct data int a, b, c; ;
27、void func(struct data *p) p-a=18; p-b=5; p-c=p-a*p-b; printf(%d %d %dn,p-a,p-b,p-c);void main() struct data m; m.a=27; m.b=3; m.c=m.a+m.b; printf(%d %d %dn,m.a,m.b,m.c); func(&m); printf(%d %d %dn,m.a,m.b,m.c);50例例 用结构体指针变量作函数参数用结构体指针变量作函数参数ma:27b: 3c:30(main)#include stdio.hstruct data int a, b, c;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年下城区青梅收购合同
- 《廉洁自律教育》课件
- 2025有关餐厅转让合同的范本
- 2025共创连锁加盟合同
- 《金融机构行政许可》课件
- 中国第二十冶金建设公司综合学校高中分校高中历史四导学案:毛泽东
- 2025年河北省张家口部分学校中考一模道德与法治试题(含答案)
- 猫砂冰淇淋采购合同协议
- 白酒礼品采购合同协议
- 甲方装修工程合同协议
- 中国镀锡铜丝行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 安装工程类别划分标准及有关规定31183
- 【道法】做核心思想理念的传承者(教案)-2024-2025学七年级道德与法治下册(统编版)
- 2025-2030中国复合材料行业市场发展现状及发展趋势与投资风险研究报告
- 2025年濮阳职业技术学院单招职业适应性考试题库及答案1套
- 血站新进员工培训
- 牧原股份养殖场臭气治理技术的创新应用
- 2025年社工招聘考试试题及答案
- 考编医疗面试题及答案
- 2025春夏童装童鞋行业趋势白皮书
- 企业危险源辨识与风险评估降低风险措施清单
评论
0/150
提交评论