




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
共31张,1,8.5函数的指针和指向函数的指针变量 函数指针:函数在编译时被分配的入口地址,用函数名表示,函数指针变量赋值:如p=max;,函数返回值的数据类型,专门存放函数入口地址 可指向返回值类型相同的不同函数,指向函数的指针变量 定义形式: 数据类型 (*指针变量名)(); 如 int (*p)();,函数指针变量指向的函数必须有函数说明,函数调用形式: c=max(a,b); c=(*p)(a,b); c=p (a,b); 对函数指针变量pn, p+, p-无意义,( )不能省 int (*p)() 与 int *p()不同,共31张,2,例 用函数指针变量调用函数,比较两个数大小,main() int max(int ,int); int a,b,c; scanf(“%d,%d“, ,main() int max(int ,int), (*p)(); int a,b,c; p=max; scanf(“%d,%d“, ,共31张,3,用函数指针变量作函数参数,例 用函数指针变量作参数,求最大值、最小值和两数之和,共31张,4,8.6 返回指针值的函数 函数定义形式: 类型标识符 *函数名(参数表); 例 int *f(int x, int y),例 指针函数实现:有若干学生成绩,要求输入学生序号后, 能输出其全部成绩,main() float score4=60,70,80,90, 56,89,67,88,34,78,90,66; float *search(float (*pointer)4,int n), *p; int i,m; printf(“Enter the number of student:“); scanf(“%d“, ,共31张,5,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2,3,2004,2000,*,共31张,6,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2004,共31张,7,例 写一个函数,求两个int型变量中居于较大值的变量的地址,2,3,3,2,*,共31张,8,例 写一个函数,求两个int型变量中居于较大值的变量的地址,不能返回形参或局部变量 的地址作函数返回值,2010,共31张,9,8.7 指针数组和指向指针的指针 用于处理二维数组或多个字符串 指针数组 定义:数组中的元素为指针变量 定义形式:存储类型 数据类型 *数组名数组长度说明; 例 int *p4;,指针所指向变量的数据类型,指针本身的存储类型,区分int *p4与int (*p)4,指针数组赋值与初始化,共31张,10,指针数组赋值与初始化,共31张,11,char name59=“gain”,“much”,“stronger”, “point”,“bye”;,char *name5=“gain”,“much”,“stronger”, “point”,“bye”;,二维数组与指针数组区别:,二维数组存储空间固定 字符指针数组相当于可变列长的二维数组 分配内存单元=数组维数*2+各字符串长度,指针数组元素的作用相当于二维数组的行名 但指针数组中元素是指针变量 二维数组的行名是地址常量,共31张,12,main() int b23,*pb2; int i,j; for(i=0;i2;i+) for(j=0;j3;j+) bij=(i+1)*(j+1); pb0=b0; pb1=b1; for(i=0;i2;i+) for(j=0;j3;j+,pbi+) printf(“b%d%d:%2dn“,i,j,*pbi); ,例 用指针数组处理二维数组,共31张,13,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,i=0,共31张,14,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,i=1,共31张,15,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,i=2,共31张,16,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,i=3,共31张,17,例 对字符串排序(简单选择排序),main() void sort(char *name,int n), print(char *name,int n); char *name=“Follow me“,“BASIC“, “Great Wall“,“FORTRAN“,“Computer “; int n=5; sort(name,n); print(name,n); void sort(char *name,int n) char *temp; int i,j,k; for(i=0;i0) k=j; if(k!=i) temp=namei; namei=namek; namek=temp; ,name0,name1,name2,name3,name4,name,Great Wall,FORTRAN,Computer,Follow me,BASIC,共31张,18,多级指针 定义: 指向指针的指针 一级指针:指针变量中存放目标变量的地址,例 int *p1; int *p2; int i=3; p2=,二级指针:指针变量中存放一级指针变量的地址,例 int *p; int i=3; p=,一级指针,单级间接寻址,二级指针,一级指针,目标变量,二级间接寻址,共31张,19,定义形式:存储类型 数据类型 *指针名; 如 char *p;,例 int i, *p; p= ()/p是二级指针,不能用变量地址为其赋值,指针本身的存储类型,最终目标变量的数据类型,*p是p间接指向对象的地址 *p是p间接指向对象的值,例 int i=3; int *p1; int *p2; p1=,多级指针,例 三级指针 int *p; 四级指针 char *p;,共31张,20,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=r; r=s; s=t; main() int a=1,b=2,*p,*q; p= ,2000,2004,2000,共31张,21,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=r; r=s; s=t; main() int a=1,b=2,*p,*q; p= ,输出: 1,2,共31张,22,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=r; r=s; s=t; main() int a=1,b=2,*p,*q; p= ,输出: 1,2,共31张,23,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t; main() int a=1,b=2,*p,*q; p= ,2000,2004,2000,共31张,24,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t; main() int a=1,b=2,*p,*q; p= ,2000,2004,输出: 2,1,共31张,25,例 一级指针与二级指针,#include void swap(int *r,int *s) int *t; t=*r; *r=*s; *s=t; main() int a=1,b=2,*p,*q; p= ,输出: 2,1,共31张,26,例 用二级指针处理字符串,#define NULL 0 void main() char *p; char *name=“hello“,“good“,“world“,“bye“,“; p=name+1; printf(“%o : %s “, *p,*p); p+=2; while(*p!=NULL) printf(“%sn“,*p+); ,运行结果: 644 : good bye,用*p可输出地址(%o或%x), 也可用它输出字符串(%s),*(p+),共31张,27,二级指针与指针数组的关系 int *p 与 int *q10 指针数组名是二级指针常量 p=q; p+i 是qi的地址 指针数组作形参,int *q 与int *q完全等价;但作为变量定义两者不同 系统只给p分配能保存一个指针值的内存区;而给q分配10块内存区,每块可保存一个指针值,共31张,28,命令行参数 命令行:在操作系统状态下,为执行某个程序而键入的一行字符 命令行一般形式:命令名 参数1 参数2参数n,main(int argc, char *argv) ,命令行参数传递,带参数的main函数形式:,C:TC copy.exe source.c temp.c,有3个字符串参数的命令行,命令行中参数个数,元素指向命令行参数 中各字符串首地址,形参名任意,第一个参数: main所在的可执行文件名,共31张,29,例 输出命令行参数,main(int argc, char *argv) while(argc1) +argv; printf(“%sn“,*argv); -argc; ,main(int argc, char *argv) while(argc0) printf(“%sn“,*argv+); ,1. 编译、链接tes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 特种设备知识与培训总结课件
- 礼记教学相长课件
- 蔬菜脱铜抗氧化酶处理工艺考核试卷及答案
- 农药粉碎工艺考核试卷及答案
- 木材榫卯防水处理工艺考核试卷及答案
- 搪瓷表面涂层耐低温冷润湿工艺考核试卷及答案
- 车辆器材管理课件
- 2025年河北省廊坊市事业单位工勤技能考试题库及答案
- 车辆出入管理课件
- 硅片表面处理工艺考核试卷及答案
- DB34T 3709-2020 高速公路改扩建施工安全作业规程
- DB61∕T 1856-2024 国土调查成本定额
- 2024年中国EPP包装制品市场调查研究报告
- 初中道德与法治教研组工作计划
- 地基沉降量计算-地基沉降自动计算表格
- 部编版(2024版)七年级历史上册第1课《远古时期的人类活动》精美课件
- 2024年云南省昆明市官渡区、呈贡区小学六年级第二学期小升初数学试卷含解析
- 《睡眠质量下降人群治未病干预方案》
- 2024年《企业战略管理》期末考试复习题库(含答案)
- 家具厂封边技能培训
- 中华民族共同体概论课件第十一讲中华一家与中华民族格局底定(清前中期)课件
评论
0/150
提交评论