找回密码
 立即注册

微信扫码登录

使用验证码登录

搜索
查看: 70|回复: 0

19.第19节课第八章善于利用指针

[复制链接]

6476

主题

3

回帖

1万

积分

管理员

积分
19556
发表于 2024-4-15 08:52:00 | 显示全部楼层 |阅读模式
好同学们,大家好!今天呢,我们为大家讲解一下关于我们指针它的这样一个使用的方式。那么之前呢?我们讲过了,指针的一般的内容,比如说我们指针呢,它的定义。它的使用。它指向了我们的数组。它引用字符串。那么接下来呢,我们会给大家讲一下我们指针。指向函数,

它的这样一个方式。那么,大家来看一下这个部分。不仅呢,变量有指针。可以定义指针变量,指向一个变量,而且函数。也有指针。可以定义一个指向函数的指针变量。指向一个函数。如果在程序中定义了一个函数,在编译时呢,系统给这个函数代码分配一段存储空间。这段存储空间呢,

它的起始地址又称为入口地址,称为这个函数的指针。可以定义一个指向函数的指针变量,用来存放某一函数的起始地址。那么,这就意味着呢?此指针变量指向。该函数。我们的函数名。就是函数的指针。它代表函数的起始地址。那么,我们可以定义一个指向函数的指针变量,用来存放某一函数起始地址。这就意味着,

此指针变量呢。指向该函数。比如说。int.星p。int,int.这里呢?定义p是一个指向函数的指针变量,它可以指向函数类型为整型。且有两个整型形参的函数。此时呢,指针变量p的类型呢,是用我们的int新int int表示。那么我们再来看一下,

如果。要用指针。调用函数。必须呢,先使指针变量指向该函数。我们来看一下这个例子。用我们的函数指针变量。调用函数,首先呢,我们来看第一种方法,通过函数名调用函数。我们来看一下,首先井号includes g dio点h编译预处理头文件标准输入输出库函数,把它包含在我们的程序当中。int May,

int max,int int,这是我们的函数声明。in tabc定义,三个整型变量。printf please enter a and BS can f百分号d百分号d取a的地址取b的地址,把输入的数据呢放在变量a和b当中。接下来c=max AB。通过函数名调用函数。这是我们的函数名max。AB呢,是我们的时参采用我们值传递的方式,将时参的值呢传递给形参,那么调用我们的函数。最后呢,

printf a等于百分号d反斜杠NB等于百分号d反斜杠n max等于百分号d反斜杠ne BC输出ABC的值。然后r0函数返回一个零值程序结束,我们来看定义的max函数int max int xin ty定义max函数int z if x大于yz=x zzz=y。那么将我们。x和y的这样一个较大大的这样一个数呢,赋给z最后呢函数返回z的值retire z。这是我们定义的这样一个max函数。那么这样呢,我们这样的,我们调用的这样一个max函数呢,它最后返回的这个z的值呢,那么就赋就返回到这样一个调用的函数当中,然后赋给c。那么这c呢?就是我们。

max这样一个函数呢?得到这这样一个值。那么,我们接下来看一下第二种方法,通过指针变量调用它所指向的函数。依然是井号includes dd二点h标准的输入速度。互函数编译就是头文件,把它包含在我们的程序当中。in t May.int max int int函数的声明。int星pint int定义,指向函数的指针变量p。in tabc三个整型,变量p=max。我们呢?

这里呢?把max它的这样一个地址呢?赋给p。使p呢指向max函数。那么,我们在这里调用我们的max函数的时候呢?我们就通过指针变量调用max函数。那么就是我们的星pab,那么这里的c等于星pab就通过我们的这样一个指向函数的指针变量呢?通过这样一个指针变量来调用我们的max函数。那么,这是我们的AB,是我们的这样一个实参的部分,那么后面呢?依然是我们的这样一个输出,

我们数值的这样一个运用的这样一个类型,那么最后return 0函数返回零时程序结束。那么,我们来看一下程序的运行的结果。输入a和b的值,然后呢?函数呢?输出的结果呢?是一个输出的这样一个max呢?是等于这样一个值的这样一个部分。那么,这样的方式呢?就是用函数指针变量来调用我们函数的这样一个方式。那么我们看来看一下怎么样来定义和使用指向函数的指针变量?它的方式呢,

是首先是类型零。然后呢,用我们的星号?指针变量名那么要加一个括号。那么后面呢,再加一个括号,写上函数参数列表,比如说我们这里的int星pint int,那么就是定义。指向函数的指针变量p。定义指向函数的指针变量呢,并不意味着这个指针变量可以指向任何函数,它只能指向在定义时指定的类型的函数,比如说我们这里的int。以及了我们的这样一个int int,

它这样一个函数指定的类型的这样一个。规定的这样一个。实际的这样一个函数的类型,类型的函数如果要是用指针调用函数呢?必须先是指针变量指向该函数。在给函数指针赋值时,必须给出函数名,只需给出函数名而不必呢给出参数。在用函数指针变量调用函数时,只需将星p括号代替函数名就可以就就就可以。就可以。在新p后面的括号中呢,要根据需要写上时差,对于指向函数的指针变量呢,不能进行算术运算,

比如说p+np加加p减减等运算了,那么是无就不不能进行这样的运算。用函数名调用函数只能调用所指定的一个函数,而通过指针变量调用函数了,那么比较灵活,可以通过不同的情况呢?先后调用不同的函数。那么,这是我们调用的函数的这样一个用的部分,那么这样一个函数的类型。那么,我们来看一下怎么样来定义和使用指向函数的指针变量,比如说我们这样一个例子输入两个整数,然后让用户呢选择一或二。选一时调用max函数输出二者中的大数,

选二时调用命令函数输出二者中的小数。我们小小的这样一个数,我们来看一下这个程序井号int ludes gdl点h。int main int max形特int,这是我们的函数声明int min。int max int y,这是我们的函数声明。int星pint int定义指向函数的指针变量。in ta bcn定义,四个整型变量。printf please enter a and BS ky f百分号d百分号d取AD地址是d的地址,把输入的数据呢放在我们的变量a和b当中。printf please choose 1或2 sff百分号d取决于你的地址一或输入一或2 if n=1,那么p=max,如果呢,

输入一。是p呢,指向max函数else if n=2 p=m in。如输入二使p指向命函数。c等于星pab调用p指向的函数,那么AB呢?这是实参的部分,那么调用我们这样一个p指向的函数。printf a等于百分,号db等于百分,号dab if n=1,printf max等于百分,号d。反斜杠nc else printf命等于百分号d反斜杠nc,那么如果n=1呢?

输出max等于这样一个数的部分。一不如其他的情况,如果n不等于一了,那么我们输出了命等于这样一个数,那么最后呢?return 0函数返回一个零只程序结束。我们来看定义的这个函数max和min int max in tx in tyintz if x大于yz=xelsez=y retire z。如果x大于y呢?让x呢赋给z。否否如果x不不大于y呢?如果是其他的情况呢?就z=y,那么最后呢?返回我们这样一个较大的数,那么z的z。

in t May,in tx in tyintz.if x小于yz=xelsez=y,那么是找到小的这个数呢?赋给z,然后呢?返回z的值,那么这是我们。用我们的指向函数的指针变量呢,那么找到两个数中的大数或者小数那么进行。运行的这样一个部分。指向函数的指针变量呢,它的一个重要用途呢,是把函数的入口地址作为参数,传递到其他函数。

指向函数的指针可以作为函数参数,把函数的入口地址呢传给形参,这样呢,就能够在被调用的函数中使用实参函数。比如说有一个函数,假设函数名为fun,它有两个形差x1和x2定义x1和x2呢,为指向函数的指针变量。在调用函数范时,定义两个函数名f1和f2给行参传递的是函数f1和f2的这样一个入口地址。这样呢,在函数中呢,那么就可以调用f1和f2。比如说我们这里呢,定义的泛函数形参呢,

是指向函数的指针变量,我们如果调用f1函数呢,那么就是。星号x1 ii是时差b等于星号x2 ij是时差,那么我们再放这样一个。在调用泛函数时,时差为两个函数名f1和f2。给行参传递的呢是f1和f2的入口地址,那么在函数泛中呢,就可以调用f1和f2函数。那么,我们来看一下用指向函数的指针,做函数参数有两个整数a和b由用户输入一二三,如果输入一程序就给出AB和b了较诈者。输入二就给出a和b的较小者,

输入三就求a和b的值a和b的和我们来看一下这个程序井号interludes dd二点hint mayi nt fine in tx in tx int。新pinta。n int int,这是我们泛函数的这样一个声明,它的参数呢?有xy以及呢?我们指向函数的指针p。int max int int,这是max函数的声明。int min int int就是m in函数的函数声明。int add int int,这是add函数的函数声明。inta=34 b=- 42 n printf,please choose一二o3。scan f百分号d取n的地址。

把所有的数据呢,放在这样一个变量n中,我们if呢n=1 fine AB max。当输入一的时候呢,我们调用的呢,是我们的max函数这里呢。我们的AB max就是我们这样一个时差的部分。那么,调用我们的卷调是我们实参的这样一个部分。else if。n=2泛abnvv输入20呢,调用win函数。else if n=3泛AB 2的输入30的调用二的函数,那么这里的AB命以及呢二的?那么,

我们的二的这是呢?就是我们的时差。我们再来看一下int泛in tx intyint星pint int,这是定义泛函数。intresoltresolt等于星px y printf百分号d反斜杠nresolt。这里呢?我们来看一下。它的这个函数呢?它的形态呢?由我们的新新pint int是我们指向函数的这样一个指针变量。那么,这里呢?result新px y这里呢?就是用我们的这样一个。指针p所指向的函数呢?

进行一个调用的这样一个函数,那么进行一个运用,那么最后呢?输出这样一个结果的这样一个部分。那么xx xy那么z if x大于yz=x=y=max=result z。这是定义max。定义b呢是inter特,并因特x因特y因特z if x小于yz=xelsez=y。print min=retard z返回含两个数说的小者,那么我们来看一下定义r的intr的inter xi nteryintzx=x+z=x+y print of sun=retard z返回呢是两个数之和。那么我们这里呢,是用指向函数的指针呢?做函数。指向函数的指针呢?做函数参数那么进行这样一个调用的这样一个运用部分。

接下来我们看一下返回指针的函数,一个函数呢,可以返回一个整型值字符值。实行值。等等,这样一些部分也可以呢,返回指针型的数据,也就是地址那么概念呢,与之前的类似,只是返回值的类型呢,是指针类型。那么大家看一下这样一个部分。int星号AA。in tx in ty.我们的a呢,

是一个函数的名称,调用它之后呢,能得到一个新型的。指向整型数据的指针,也就是整型数据的地址xy是函数参数。是整形那么大家要注意在这个心a的两侧没有括号。在新的两侧分别为。在a的两侧分别为星号运算符和括号运算符,那么。我们这是a呢,加上后面的这样一个部分呢,是我们函数的形式函数,前面呢有一个星号表示此函数呢,是指针型函数。函数值呢,

是指针最前面的int返值,表示返回的指针呢,指向。整形。变量。那么我们再来看一下返回指针型的函数,那么有三个函学生,每个学生呢,有b门课的成绩要求在用户输入学生序号后呢,能输出该学生的全部成绩。用指针函数来实现,那么我们看一下这个程序井号include sdl点hinter main float score。括号四,这是定义一个二维数组。那么,

每个数组的每一列。那么第二维呢?这个数组的第二位呢?有四个元素,那么这定义我们的数组。什么float星号search float。括号。星号point。方括号4 in tn,这是函数的声明,那么这是一个返回指针值的函数。它返回的呢,是一个浮点,指向浮点型数据的这样一个指针。的这样一个类型。

这里的float。括号星号point。方括号四,这是第一个。数组。其中的形参呢pointer是指向一维数组的整型变量,指针变量。接下来float星p。那么,这是我们定义一个整指向。浮点型的指针变量p。in tik.printf enter the number of students+f百分号d取A区的k的地址符号k输入要找的学生的序号。print the score of number百分号dr返型in kp=search score k。调用search函数返回score k。

您的地址。那么,我们来看一下。那么我们这里呢p=search school k,它是调用我们的search函数返回k0的,这样一个地址。那么,我们来看一下这个接下来的部分for I=0 I小于4I加加printf百分f五点二f反反斜杠t。信号p+I。score k0。就是输出score k0到score k3的值print反斜杠n return 0程序结束,那么我们看定义的这样一个函数float search float新。point 4 intern我们的形参point呢,是指向一维数组的指针变量float星PT。PT=pointer。

加n那么前面是一个星号,那么这是我们PT的,值了,是我们。score k0的这样一个地址,那么最后呢?retell PT返回我们的这样一个。指针的这变量的值那么PT。那么,这是我们运用的这样一个指针的,这样一个方式了,运行的这样一个返回指针值的,这样一个运用部分。那么来那么我们看一下这个部分。好了,

这是我们运用的返回函,指针值的这样一个函数的这样一个方式啊,那么运用的这样一个。实现这样一个。运行到运行这样一个使用,这样一个指针值的,这样一个运行方式,那么这是我们。使用指针值的这样一个运行部分。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5432考试网 ( 蜀ICP备2022024372号|川公网安备51152402000101号 )|网站地图

GMT+8, 2024-5-19 17:56 , Processed in 0.097268 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表