罗泽兵 发表于 2024-4-15 08:52:12

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

好吧,我们再来看一下返回值认知的函数。那么,我们对刚才这个例子呢?找出其中有不及格课程的学生及其学号,那么我们看一下这个程序in interm float scope,那么这是我们定义的这样一个数组。接下来呢return。float.井号。星星号search float。星号四函数的声明新p变成ig for I=0 I小于3I加加。那么p=search。score+I那么这是调用search函数,如果有不及格的呢?

返回score I0的地址,否则呢,返回。这样一个null if p等于。星号school+I,如果返回的呢?是school I0的地址表示p的值呢?不是now。那么,接下来printf number百分号d score if orig=0 g小于4g加加printf百分号五点二f。星号p加。g那么这里呢,是输出score I0到score I3的值,接下来printf反斜杠n。然后我们看一下定义的这个函数float星号,

search float星号。pointer 4,咱们定义函数pointer呢,是指向一维数组的指针变量。inti=0 float,新pp=null。我们先是PT的值为null。for这样一个初始条件呢,是空没有没有写这样一个初始条件I小于4I加加。if星号括号星。pointer+I小于60,那么星号pointer=PPT,如果有不及格的课程呢?使PT呢?指向school I0,

最后呢,retard PT返回这样一个指针变量的指针的值。那么,这是我们指针的这样一个使用的,这样一个方式。那么,接下来我们再看一下指针数组和多重指针。那么,定义一维指针数组的名方式呢?是我们的类型名加星号加数组名和我们的数组长度。比如说我们的int星期四。一个数组,若其元素呢,均为指针类型数组,称为指针数组,

也就是说指针数组中的每一个元素呢,都存放一个地址,相当于一个指针变量。指针变量呢,比比较用来适合指向某个某若干个字符串,使字符串的处理方式呢,更加的灵活。那么我们看一下这个指针数组的部分。那么,比如说指针数组。比如说指针数组的第一个元,第一个元素呢,指向这样一个字符串,第二个元素,指向第二个字符串,

第三个元素,指向第三个字符串。第四个元素指向第四个字符串,第四个元,第五个元素呢?指向第五个字符串,那么如果我们按若干字符串呢?按字母顺序大小呢?由小到大输出我们进行排序。我们指向互换后呢,那么再进行输出的话。那么就是按照这个顺序呢,那么进行使用的这样一个方式。那么,我们来看一下这个程序,

将若干字符串呢?按字母顺序由小到大输出。首先是我们的井号includes tdi点h井号st di。includes终点h。string点也取了,是我们的这样一个一字符串的这样一个处理函数的库函数的这样一个运用的这样一个部分,那么所以呢,把它包含在我们的。文件当程序当中inter main wade sort char新name方括号int,这是函数的声明。那么,这个恰信name呢?是定义一个一维的。指针数组。那么是第一个一维的指针数组,

那么void print char新name in tn,这是一个函数声明。那么char新name=flow e basi CAL great or for train?computer design那么分别呢?指向让指针数组的五个元素呢?指向五个字符串,那么in tn=5 sort name n调用sort函数对字符串排序。print name n第二用name print函数呢?输出字符串,最后呢?return 0函数返回一个零值程序结束,那么我们来看一下定义的这样一个函数函数。w的sort恰新name in tn,这是定义我们的sort函数char新temp in tij k for I=0 I小于n- 1I加加。k=I for,

j=I+1,j小于NG加加。if专compare na mek。name g大于零,那么k=I。if k不等于ik=ji fk不等于I temp name,I name I=name,k name k=temp。那么这里呢,是我们进行的一个选择排序,那么我们首先呢定义。一个指针,一个字字符型,指向字符的。指向字符型的这样一个指针变量temp第三个整型变量I gk,

那么负I=0 ni,小等于小于n- 1I加加。它的I的初值呢?是零它的这样一个循环条件表达式的这样一个值了部分呢?是我们的I小于n- 1它的这样一个变量的改变方。部分呢是I加加的增量是自增一。我们用选择法进行排序。那么,首先呢,令k=I。ij的初值呢是I+1那么g小于NG加加if呢?如果我们比较这两个。字符串name k和name g这两个。指针所指向的字符串呢?那么我们进行比较。

如果大于零的话,那么k=g,那么也就是说,如果这样一个它比较的话,如果它是大于零的话。那么我们的k呢?若把g呢赋给我们的k。如果我们的k呢,它不等于I的话,那么不是我们。最先呢,赋值给我们k的这样一个I的这样一个负的值,赋值的这样一个部分的话,那么说说明了我们。k了,

它是j的值了。那么那么就是j的值呢?赋给了k那么就是说我们进行的比较呢?它是大于零的,那么就把j的值赋给了k?那么,如果k的值不等于I的话,那么说明那么咱们大小了,那么就要进行。那么它大小呢?就是要没要要按照这个顺序来进行变化的,这个部分那么就是将我们。name I和name。k它的这样一个。数组元这个数组元素的值呢?

进行交换,那么我们数组元素的值呢?是我们的指针变量,比如说将数组元素的值呢?它指针它是是我们的将指针的值。进行交换,将lab I当中的这样一个指针与指针的指与我们lab k。当中的这样一个指针值啊,那么表示的指针的值啊,进行交换,那么我们name ki呢就和name k指向的这样。name I呢,就指向的是另外一个,另外一个部分。那么MI呢,

就指向的是我们这样一个g呢,它它所在的这样一个部分,那么最后呢,那么进行选择的时候呢?进行了一次一次排序之后呢,我们的I呢,就指向的是最小的字母顺序最小的。那么,字母的最小的那一个?那一个字符字符串,那么就是name I呢?指向的是我们找到了。我们指向的本来是其他是其他这样一个。那么name I呢?经过一次比较之后呢?

我们的name I呢?就是找到的指向的原本指向的最小的字符串的这样一个字母的这样一个字符串的这样一个。这样一个字,符串的部分,那么指向的是这样一个字母最小的这样一个字,符串的部分,那么经过这样一个排序之后呢?那么我们就可以按照由小到大的顺序呢?对我们的字字符串呢?那么进行排序?然后进行排序的这样一个部分进行排序,那么最后呢,我们printf print word print charge name。那么,定义我们的函数I for I=0 I小于ni加加f百分号s反循环name I按指针数组元素的顺序呢?

输出它们所指向的字符串,那么我们已经按照这个排序的方式了,按字母顺序大小了,由小到大进行排序。那么指针呢?指指向不同的,按照这样一个顺序呢?指向我们的字符串,指向不同的部分,那么最后呢?那么进行一个输出,那么就是我们利用指针输出了,那么进行了这样一个方式。那么,接下来我们再看一下指针,

指向指针数组的指针变量。那么我们再看一下,在了解了指针数组的基础上,还需要了解指向指针数据的指针变量,简称为指向指针的指针。比如说我们的类目是一个指证数组,它的每一个元素呢是一个指证型的变量,其值为地址,那么既然类目是一个数组,它的每一个元素呢都有相应的地址。数组名name代表该指令元素首地址的地首元素的地址。name+I就是name I的地址。name+I呢,就是指向指针型数据的指针,还可以设置一个指针变量,

它指向数组元素,指向数组指针,数组的元素。t呢,就是指向指针型数组的指针变量定义,一个指向指针数据的指针变量,比如说恰星星t两个星号。p的前面呢,有两个星号p指向一个字符指针变量,这个字符指针变量呢,指指向一个字符型数组字符型数据,如果引用新p就得到了p所指向的字符指针变量的。值那么p=name+2 print百分号d返修和n新p,这就是name 2的值,它是一个地址。

那么printf。百分号s反斜杠n星p,它是以字符串的形式呢?输出我们的这样一个字,符串那么接下来我们看一下指使用指向指针数据的指针变量。井号includes就d二点hinter main char新name。flow这样一个后面的这样一个数据恰星星p两个星号,那么这表示的是指向指针数据的指针变量。pint I for I=0 I小于5I加加p。p=name+i print f百分号s返向爱心p,那么这就是呢?输出。每个输出我们数组中的。指针数组中的元素呢?所指向的。

这样一个字,符串。那么,这样一个。输出我们数组元素了,那么表示了这样一个指向的字字符串的这样一个部分。我们p呢,是指向恰新型的指针变量,也就说指向指针的指针在第一次执行for循环体时呢,赋值语句p=name+I使p指向name数组的零号元素name 0。星p呢,是lam 0的值。也就是说,第一个字符串首地址,首字符的地址。

用print函数输出第一个字符串格式五五符为百分号s,执行五次循环体依次呢输出五个字符串。指指针数组的元素呢,也可以不指向字符串,而指向整型数据或者实行数实行数据的。那么我们再来看一下,有一个指针数组,其元素呢,分别指向一个整形数组的元素,用指向指针数据的指针变量输出各整形数组各元素的值。我们来看一下这个程序井号int lu deh TD I点hinter main inta 5 int新number 5。那么当中呢?是我们。a0。的地址a1的地址a2的地址a3的地址,

还有a4的地址int星星pip呢,是指向指针型数据的。指针变量p=num number four。I=0 I小于5I加加printf百分号d星星pp加加printf反斜杠n return 0。那么,这里呢?是用我们指向指针数据的这样一个指针变量的方式呢?来输出整型数组呢?各元素的值。那么,我们来看一下指针数,那么我们看一下这样一些指针的这样一个。我们这样一个数组的这样一个使用的,这样应用方式。我们最后再来看一下动态内存分配与指向,

它的指针变量,全局变量呢,是分配在内存中的这样一个静态存储区的。非静态的局部变量呢,是分配在内存中的动态存储区了,这个存储区呢,是一个称为在的区域,那么除此之外呢C语言还允许建立。内存动态分配区域也存放一些临时用的数据,那么这些数据呢?不必在程序的声明,部分定义也不必等到函数结束时再释放,而是随时需要开辟。需要时随时开辟,不需要时随时释放。

这些数据呢,是临时存放在一个特别的自由存储区,称为堆区。可以根据需要向系统呢申请所需大小的空间。由于未在声明部分呢,定义它们为变量或数组,因此不能通过变量名或数组名呢去引用这些数据,只能通过取值来引用。我们来看一下怎样建立内存的动态分配。我们用MR kit market k it函数呢?开辟动态区。函数的原型呢,是这样一个void星号mrk it。onside in the size,它的作用呢?

是在内存的动态存储区中呢?分配一个长度为size的连续存储区空间。形参size的类型呢?定义为无符号整形,那么不能为负数,那此函数的返回值呢?是所分配区域的第一个字节的地址,或者说此函数是一个指针型函数。返回的指针呢?指向分配域的第一个字节,比如说mother k it。100那么开辟100字节的临时分配域函数值呢?为其第一个字节的地址指针的值的基类型呢?为void即不指向任何类型的数据,只提供一个纯地址。

如果这个函数呢,为了成功的执行,那么则返回控制车道。好吧,我们还可以呢,用color KC other kit函数开辟动态存储区,它的方式呢?是void星号rc other k it on signed in on signed size。它的作用呢,是在内存动态存储区中分配n个长度为size连续存储空间,这个空间呢,一般比较大,足以保存一个数组用c2k的函数呢,可以为一组数组呢,开辟动态存储空间。

n为数组元素的个数,每个元素呢,为size长度,为size这就是动态数组。函数返回所指向分配区域的第第一个自己的指针,如果分配不成功,则返回了,比如说p=c 20k的54。开p50×4个字节的临时分配域,把首地址呢赋给指针变量p。那么我们还可以用relocate函数呢,重新分配动态存储区,它的方式呢?是w的信号r relocate。嗯。

为的星p。on sight inter size.如果已经通过mrk it函数了,或者cr k it函数获得了动态空间,想要改变其大小,可以用rrkit函数啊重新分配。用rel k的函数呢?将p所指向的动态空间的赛日呢?改为动态空间大小的改变为赛日p的值不变,如果重分配不成功返回到。比如说我们的relocate p50将所指向的p所指向的已分配的动态空间呢改为50字节。好吧,我们还可以呢,用free函数释放动态存储区,它的方式呢?

是函数原型呢?是我们函数原型方式呢?是real的free。void星系它的作用呢,是释放指针变量p所指向的动态空间,使这部分空间呢能够被其他变量所使用。g是最近一次调用cr k的,或者是mrk的函数所指用的函数,函数返回值,比如说free p,它是释放指针变量所指向已分配的动态空间。free函数呢,没有返回,返回值,返回值。

那么,这些函数的声明呢?包含在stdlib点h头文件中,在用到这些函数时,应当用井号include stdlib点h指令呢?把stdlib。点h头文件包含在程序文件中。我们再看一下void的指针类型,那么c九九呢?允许使用基类型为void的指针类型,可以定义一个基类型为void的指针变量。它不指向任何类型的数据,再将它的值赋给另一值变量时呢,由系统对它进行信息类型转换,使之适合了被赋值的类变量的类型。

比如说新PT,那么PT呢等于星号mrk it 100,那么我们mrk。k it的值呢?是新型把它转换为int新型。好吧,我们来看一下我们的这样一个例子。建立动态数组输入五个学生的成绩,另外用一个函数呢检查其中有无低于60分的输出不符合格的成绩。井号includes d do点点h星号。井号includes d do点BA点h。我们在程序中呢,我们要使用我们的这样一个mrk的函数,那么所以呢,我们要在我们的声明当中呢。

写定义,当签名当中呢?写上我们对我们的ST tip函数进行一个声明,那么将它包含在我们的这样一个程序当中。这是我们的函数声明。int新pei。p=int二新mrk it 5。新size of int。五神size of int。for I=0,I小于五,I加加stand f百分号dp 1+I输入五个学生的成绩check p1调用check函数return 0函数返回一个零值程序结束。我们看定义的这个函数check。为的check星int星p那么定义我们的check函数进形参呢?是int星型指针。

inti printf,there are four.for I=0 I小于5I加加efp I小于60 printf百分号DPI输出不合格的成绩。printf.反七杠n那么这是我们调用的,我们的这样一个。数组的这样这样数组这样一个。指针的方式啊,那么来运行这样一个程序的部分好吧,我们来看一下我们讲过的指针的部分,那么我们首先呢,要准确理解指针的含义c指指针的C语言呢,是一个形象化的名词,形象的表示指针的指。这样的关系,

其实在物理上呢,是通过地址来完成的,我们的这个取地址符a是变量a的地址,也可以称为变量a的指针。指针变量存是存放地址的变量,也可以说指针变量是存放指针的变量。指针变量的值呢,是一个地址,也可以说指针变量的值呢,是一个指针。指针变量呢。可以称为地址变量,它的值是地址,我们这样一个符号呢,是取地址运算符,

这样一个符号a是a的地址,也可以说这样一个符号是取指针运算符。数组名呢,是一个地址是数组元素的首地址,首元素的地址也可以说数组名是一个指针是数组,首元素的指针。函数名是一个指针,指向函数代码区的首地首字节,也可以说函数名呢,是一个地址。函数的时差如果是数组名呢,传递给形参的是一个地址,也可以说传递给形参的是一个指针。那么,我们要区别指针和指针变量。

指针就是地址,而指针变量呢?是用来存放地址的指针变量。那么,我们来看一下这个指针变量的这样一个归纳的这样一个比较部分inti,它的值呢?是int型的定义,整型变量I。int星p,它是定义p为指向整型数据的指针变量inta 5,它是定义。整型数组a,它有五个元素int星p4,它是定义指针数组p,它由四个指向整型数组的指针元素组成。

int括号CP 4,它p为指向四个元素,为一维数组的指针变量。它为指向包含四个元素的。一维数组的指针变量in TF,那么括号f为返回值为整型函数值的这样一个函数。int星p。括号p为返回一个指针的函数,该指针呢,指向整形数据int括号星p括号。p为指向函数的指针,该函数呢,返回一个指针值返回一个指性值。int信息pp是一个指针变量,它指向一个整指向整型数据的指针变量。

y的星pp是一个指针变量,其基类型呢?为y的空类型不指向具体的对象。那么我们再看一下指针的运算,指针呢,变量加减一个整数,比如说p加加,它是将该指针变量的原值和它指向的变量所在的存储单元的字节数相加。那么,指针变量赋值这样一个变量地址呢?赋给一个指针变量,而不应该把一个整数呢?赋给指针变量,比如说。我们的p等于取地址a将变量a的地址赋给pp=error将数值error的首地址赋给BP等于。

取地址i ever I将数组iirrever的第I个元素的地址呢?赋给p。p=max将max呢为定义的函数,将box的入口地址呢赋给p1p 1=P 2P一和p2呢是基类型相同的变指针变量,将p2的值呢赋给p1。两个指针变量呢,可以相减,如果两个指针变量呢,都指向同一个数组中的元素,这两个指针变量之差是两个指针之间的元素个数。好同学们,那么这就是我们今天所讲的指针的这样一个运用的类型好吧,大家呢,下来的时候呢,再看一下我们书上的我们讲过的这样一些。

指针的运用的方式和它这样一个使用的这样一个类型使用的这样一个内容,那么大家进行一个了解和熟悉。好,我们今天的课呢,就讲到这里好,谢谢大家。


页: [1]
查看完整版本: 20.第20节课第八章善于利用指针