第一范文网 - 专业文章范例文档资料分享平台

C程序指针(理论讲义三)

来源:用户分享 时间:2025/8/24 9:14:26 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

数组的指针以外,还可以是函数的指针。

函数的指针可以作为函数参数,在函数调用时可以将某个函数的首地址传递给被调用的函数,使这个被传递的函数在被调用的函数中调用(看上去好象是将函数传递给一个函数)。函数指针的使用在有些情况下可以增加函数的通用性,特别是在可能调用的函数可变的情况下。

例10-15:编制一个对两个整数a,b的通用处理函数process,要求根据调用process时指出的处理方法计算a,b两数中的大数、小数、和。 解:

int max(int ,int ); 声明3个处理函数(只需要形参类型) int min(int ,int ); int add(int ,int ); 否则编译器不知道max,minint add1(int); 是变量还是什么其它符号 main() { int a,b; printf(\ printf(\调用通用处理函数 */ printf(\ printf(\虚实结合时,函数指针赋值 printf(\} int max(int x,int y){ return x>y?x:y; } /* 返回两数之中较大的数 */ int min(int x,int y){ return x

说明:

(1) 函数process处理两个整数数,并返回一个整型值。同时又要求process具有通

用处理能力(处理求大数、小数、和),所以可以考虑在调用process时将相应的处理方法(“处理函数”)传递给process。 (2) process函数要接受函数作为参数,即process应该有一个函数指针作为形式参数,以接受函数的地址。这样process函数的函数原型应该是: int process(int x,int y,int (*f)());

(3) “函数指针作为函数参数”的使用与1、4、1节介绍的步骤完全相同,即函数

指针变量的定义-在通用函数process的形参定义部分实现;函数指针变量的赋值-在通用函数的调用的虚实结合时实现;用函数指针调用函数-在通用函数内部实现。 (4) main函数调用通用函数process处理计算两数中大数的过程是这样的: ? 将函数名max(实际是函数max的地址)连同要处理的两个整数a,b一起作为process

函数的实参,调用process函数。 ? process函数接受来自主调函数main传递过来的参数,包括两个整数和函数max

的地址,函数指针变量f获得了函数max的地址。 ? 在process函数的适当位置调用函数指针变量f指向的函数,即调用max函数。本

例直接调用max并将值返回。这样调用点就获得了两数大数的结果,由main函数printf函数输出结果。 同样,main函数调用通用函数process处理计算两数小数、和的过程基本一样。

(5) 教材:P158,process函数头部:函数指针定义中不需要指定形参个数。但是

一般情况函数指针指向的函数参数个数一般是数量类型相同的,以便用统一的格式如(*f)(x,y)去调用。

process函数是一个“通用”整数处理函数,它使用函数指针作为其中的一个参数,以实现同一个函数中调用不同的处理函数。

10、5 返回指针值的函数

函数可以返回整型、实型、字符型等类型的数据,还可以返回地址值-即返回指针值。 返回指针值的函数定义:类型名 * 函数名(参数表) 例如:

int *fun(int x,int y)表示func是返回整型指针的函数,返回的指针值指向一个整型数据。该函数还包含两个整型参数x,y。

系统内存分配函数void *malloc(size_t size);也是一个返回指针值的函数。返回的指针指

向一片分配好的内存空间。

例10-16:返回两个数中大数地址的函数。

int *fun(int,int); main() { int i,j,*p; printf(\ p=fun(i,j); /* 调用fun,返回大数地址,赋值给指针变量p */ printf(\打印p指向的数据 */ } int *fun(int x,int y) /* fun函数返回形参x,y中较大数的地址(指针) */ { int *z; if(x>y)z=&x; else z=&y; return z; } 结果: enter two num to i,j:12 38 max=38 说明:

(1) main函数从键盘获得两个整数i,j(本例12,38)。将i,j作为实参调用fun。 (2) 通过虚实结合,fun函数的形参x,y获得了这两个整数(本例12,38),将大

数的地址返回(本例是&y)。 (3) 返回的地址值赋值给main函数的指针变量p,main函数打印p指向的整型数,即y的值。 思考:

阅读下面的程序,分析结果,为什么会是这样?

int *fun(int,int); int add(int,int); main() { int *p,i,j,sum; printf(\ p=fun(i,j); sum=add(444,444); printf(\} int *fun(int x,int y) { int *z; if(x>y)z=&x; else z=&y; return z; } int add(int a,int b) { return a+b; } 结果: enter two num to i,j:12 38 max=444 sum=888

10、6 指针数组与指向指针的指针 10、6、1 指针数组

数组的指针:指向数组元素的指针。数组元素可以是一般数据类型,也可以是数组、结构体等数据类型。数组指针的定义与数组元素指针的定义相同。

指针数组:一个数组,如果其数组元素均为指针,那么此数组为指针数组。

搜索更多关于: C程序指针(理论讲义三) 的文档
C程序指针(理论讲义三).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4oula5efo94yj364r8wa_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top