




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计技术程序设计技术 n n C C语言数据描述和语言数据描述和C C程序设计初步程序设计初步 n n 结构化程序设计基础和结构化程序设计基础和C C语言的控制结构语言的控制结构 n n 数组及其应用数组及其应用 n n 函数与函数与C C程序结构程序结构 n n 指针与函数指针与函数 n n 指针与数组指针与数组 n n 字符串及其应用字符串及其应用 n n 结构体类型和联合体类型结构体类型和联合体类型 n n C C语言的文件处理及其应用语言的文件处理及其应用 n n 位运算与枚举类型位运算与枚举类型 指针与函数指针与函数 n n 指向函数的指针指向函数的指针 n n 返回指针值的函数返回指针值的函数 指向函数的指针指向函数的指针 n n 指向函数指针变量的定义指向函数指针变量的定义 n n 用指向函数的指针变量来调用函数用指向函数的指针变量来调用函数 n n 指向函数的指针变量作函数参数指向函数的指针变量作函数参数 5.1.1 5.1.1 指向函数指针变量的定义指向函数指针变量的定义 n n 指向函数的指针变量指向函数的指针变量(简称函数指针)(简称函数指针) n n 每一个函数都是一个程序模块,这个模块在内存中都占有每一个函数都是一个程序模块,这个模块在内存中都占有 一片存储区,一片存储区,函数名函数名代表了该存储区的代表了该存储区的首地址首地址,称为函数,称为函数 的入口地址的入口地址 。定义一个指针变量并且使它指向函数的入。定义一个指针变量并且使它指向函数的入 口地址,就称这个指针变量为指向函数的指针变量。口地址,就称这个指针变量为指向函数的指针变量。 n n 指向函数的指针变量的定义指向函数的指针变量的定义 (*指针变量名指针变量名)()(形参表形参表);); n n 存储类别存储类别 函数指针变量本身的存储特性;函数指针变量本身的存储特性; n n 数据类型数据类型 指针指向的指针指向的函数的返回值类型;函数的返回值类型; n n 给指向函数的指针变量赋值:给指向函数的指针变量赋值: 指向函数的指针变量函数名指向函数的指针变量函数名; ; n n 函数指针的调用格式函数指针的调用格式 (*(*函数指针变量函数指针变量)()(实参表实参表) 指向函数的指针指向函数的指针 n n 指向函数指针变量的定义指向函数指针变量的定义 n n 用指向函数的指针变量来调用函数用指向函数的指针变量来调用函数 n n 指向函数的指针变量作函数参数指向函数的指针变量作函数参数 定义指向函数的指针变量后,就可将一个定义指向函数的指针变量后,就可将一个函数名函数名赋给赋给 该指针变量。此后,对该指针变量的指针运算就是使该指针变量。此后,对该指针变量的指针运算就是使 程序控制转移到指针指向的程序控制转移到指针指向的函数入口地址函数入口地址去执行该函去执行该函 数的函数体。数的函数体。 例如:有函数说明为: void swap(int x,int y)void swap(int x,int y); 指向函数的指针变量定义:指向函数的指针变量定义: void (*fp)(int x,int y);void (*fp)(int x,int y); 将函数名将函数名swapswap赋给函数指针变量赋给函数指针变量fpfp: fp=swap;fp=swap; 使用函数指针变量使用函数指针变量fpfp调用函数调用函数swapswap的形式:的形式: (*fp)(a,b)(*fp)(a,b) fp(a,b)fp(a,b) ; ; 5.1.2 5.1.2 用指向函数的指针变量调用函数用指向函数的指针变量调用函数 例例5-15-1 编程序计算下面的公式,其中n从键盘输 入,要求使用指向函数的指针变量来实现。 (n(n为奇数时为奇数时) ) (n(n为偶数时为偶数时) ) 5.1.2 5.1.2 用指向函数的指针变量调用函数用指向函数的指针变量调用函数 5.1.2 5.1.2 用指向函数的指针变量调用函数用指向函数的指针变量调用函数 F F T T 图图5.1 5.1 程序算法描述程序算法描述 开始 n=1 n%2=0 fp=f1fp=f2 (*fp)(n)调用函数 结束 输入n值 输出结果 输出数据错误 根据以上算法描述写出程序代码如下:根据以上算法描述写出程序代码如下: #include #include double f1(int x),f2(int x);double f1(int x),f2(int x); void main()void main() double (*fp)(int x);double (*fp)(int x); /* /*定义指向函数的指针变量定义指向函数的指针变量fp*/fp*/ int n; int n; printf( printf(“ “input ninput n:” ”);); scanf( scanf(“ “%d%d” ”, if(n=1) if(n=1) if(n%2=0) if(n%2=0) fp=f1;fp=f1; /*n /*n为偶数,指针变量为偶数,指针变量fpfp指向函数指向函数f1()*/f1()*/ else else fp=f2;fp=f2; /*n /*n为奇数,指针变量为奇数,指针变量fpfp指向函数指向函数f2()*/f2()*/ printf( printf(“ “value=%9.4fnvalue=%9.4fn” ”, ,(*fp)(n)(*fp)(n); /*); /*用函数指针调用函数用函数指针调用函数* */ / else else printf( printf(“ “Data error!nData error!n” ”);); 5.1.2 5.1.2 用指向函数的指针变量调用函数用指向函数的指针变量调用函数 6 6 double f1(int x)double f1(int x) int k;int k; double value=1.0;double value=1.0; for(k=2;k#include #include #include “ “ex05-04.cppex05-04.cpp” ” /*/*通用函数包含到本源文件中通用函数包含到本源文件中* */ / double f1(double x); double f1(double x); /*/*被积函数的原型声明被积函数的原型声明* */ / double f2(double x);double f2(double x); void main() void main() double y1,y2; double y1,y2; int n; int n; printf(“Input number of sections:“); printf(“Input number of sections:“); scanf(“%d“,scanf(“%d“, y1=collect(y1=collect(f1f1,0,2,n); ,0,2,n); /*/*函数名为实参函数名为实参* */ / y2=collect(y2=collect(f2f2,-1,1,n);,-1,1,n); printf(“y1=%fn“,y1);printf(“y1=%fn“,y1); printf(“y2=%fn“,y2);printf(“y2=%fn“,y2); 5.1.3 5.1.3 指向函数的指针变量作函数参数指向函数的指针变量作函数参数 double f1(double x) /*被积函数1+x的C语言描述*/ double f; f=1+x; return f; double f2(double x) /*被积函数1/(1+4x2)的C语言描述*/ double f; f=1/(1+4*x*x); return f; 5.1.3 5.1.3 指向函数的指针变量作函数参数指向函数的指针变量作函数参数 调用过程中的调用过程中的 参数传递参数传递 C C程序的控制结构程序的控制结构 n n 指向函数的指针指向函数的指针 n n 返回指针值的函数返回指针值的函数 5.2.1 5.2.1 返回指针值函数的定义和调用返回指针值函数的定义和调用 一般函数的返回值可以是整型、实型、字符型等基一般函数的返回值可以是整型、实型、字符型等基 本数据类型,也可是空类型(本数据类型,也可是空类型(voidvoid)或其它用户自)或其它用户自 定义数据类型。如果函数在调用后返回一个指针值定义数据类型。如果函数在调用后返回一个指针值 (地址地址),这种函数称为返回指针值的函数。),这种函数称为返回指针值的函数。 n n 返回指针值函数的头定义返回指针值函数的头定义 (形式参数表形式参数表) ) n n 注意区别以下定义注意区别以下定义 float *func(float x,float y)float *func(float x,float y) 返回指针值的函数返回指针值的函数 float (*fper)(float x,float y)float (*fper)(float x,float y) 指向函数的指针变量指向函数的指针变量 n n 返回指针值函数的调用返回指针值函数的调用 函数的返回值只能赋给相同数据类型的指针变量。函数的返回值只能赋给相同数据类型的指针变量。 例例5-65-6 用静态局部变量和返回指针函数求用静态局部变量和返回指针函数求 #include #include long *fac(long n)long *fac(long n); Void main()Void main() long n,i,sum=0,*pi;long n,i,sum=0,*pi; printf(“Input n:“);printf(“Input n:“); scanf(“%ld“, scanf(“%ld“, for(i=1;i void main() int *fun(); int num,*count; for(num=1234;num=1;num-) if(num%3=0) count=fun(); printf(“count=%dn“,*count); int *fun() int i; i+; return 使用自动变量, 程序有潜在问题 5.2.1 5.2.1 返回指针值函数的定义和调用返回指针值函数的定义和调用 n n 存储分配函数存储分配函数malloc malloc ( (在头文件在头文件stdlib.hstdlib.h中)中) 原型:原型:void *malloc(size_t);void *malloc(size_t); 功能:在内存的动态存储区分配由功能:在内存的动态存储区分配由size_tsize_t所指定大小的存储所指定大小的存储 块,返回该存储块的地址(指针)。返回指针类型为块,返回该存储块的地址(指针)。返回指针类型为voidvoid (空类型),程序中应根据需要将它转换为所需的任何类(空类型),程序中应根据需要将它转换为所需的任何类 型。如果存储器中没有足够的空间分配,即当存储分配失型。如果存储器中没有足够的空间分配,即当存储分配失 败时返回值为败时返回值为NULLNULL。 n n 存储释放函数存储释放函数freefree ( (在头文件在头文件stdlib.hstdlib.h中)中) 原型:原型:void free( void *memblock );void free( void *memblock ); 功能:释放由指针变量功能:释放由指针变量memblockmemblock指明首地址,并由指明首地址,并由mallocmalloc 函数函数动态分配的存储块。动态分配的存储块。 例例5-85-8 使用使用mallocmalloc和和freefree函数的示例函数的示例1 1 5.2.2 5.2.2 存储分配标准库函数和动态变量存储分配标准库函数和动态变量 使用使用mallocmalloc和和freefree函数的示例函数的示例2 2 #include #include #include #include Void main()Void main() int *ptr; int *ptr; ptr= ptr=(int *)(int *)malloc(sizeof(int); malloc(sizeof(int); 返回指针值函数的调用返回指针值函数的调用 if if (ptr=NULL)(ptr=NU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第22章 二次函数 单元测试(含答案)人教版(2024)数学九年级上 册
- 2025年中高端衡器合作协议书
- 校长招考试题及答案
- 2025年湖南省长沙市雅礼外国语学校中考数学模拟试卷(3月份)(含答案)
- 工程造价信息题库及答案
- 2025年心理与健康考试题及答案
- 2025年阜阳中考试卷及详细答案
- 2025年宁夏二建考试试题及答案
- 2025年分类考试笔试题目及答案
- 慢性伤口概述
- 2025年动火票管理制度
- 【石河子】2024新疆石河子市事业单位笔试附带答案详解
- 矿山视频监控设备管理制度
- 2025至2030年中国微晶石墨材料行业市场运行态势及发展战略研判报告
- 2025-2030年中国印刷电路板(PCB)检测设备行业市场现状供需分析及投资评估规划分析研究报告
- 2025年四川宜宾发展产城投资有限公司招聘笔试参考题库含答案解析
- 一年级语文上册习题:部编每日拼读练习
- T/NAHIEM 54-2022骨髓移植病房建设标准
- 辞工欠薪协议书
- 服装品牌专卖店空间设计
- 一年级小学生行为规范培养指南
评论
0/150
提交评论