找回密码
 立即注册

微信扫码登录

使用验证码登录

搜索
查看: 68|回复: 0

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

[复制链接]

6476

主题

3

回帖

1万

积分

管理员

积分
19556
发表于 2024-4-15 08:50:00 | 显示全部楼层 |阅读模式
好,我们看一下,在引用数组元素时,指针的运算。在指针呢,指向一个数组元素的时候呢,可以对指针呢进行一些运算,比如说加一个整数,比如说p+1。它只表示的是指向同一数组中下一个元素。减一个整数,比如说p- 1,表示指向同一数组中上一个元素,我们也可以进行自加p加加加p,或者说自减p减减减p。

我大家注意,这里执行p+1时啊,并不是将p的值地址的简单的加一,而是根据定义的基类型,加上一个数组元素所占用的字节数。两个指针相减,比如说p1-p二,只有p1和p2呢,都指向同一数组中的元素时才有意义。才才有这样一个作用的,这样一个。方式结果呢,是两个地址之差,除以数组元素的长度,那么两个地址呢,

不能相加那么p不能不能写为p 1+p二。如果p的初值呢,为我们数组元素的首首地数,组首元素的地址。那么p+I和a+I就是数组元素AI的地址,或者说它指向数组。a数组序号为I的这样一个元素。那么,星号p+I或者说星号a+I是p+I或者a+I所指向的数组元素,那么就是我们的AI。我们的方括号呢,是变,实际上呢,是变子运算符就是将AI呢,将a+I计算地址,

然后找出此地址单元中的值。那么,我们来看一下。p+I如果p的初值呢?为我们的数组首元素的地址,那么p+I。和a+I就是数组元素AI的地址。也就或者说,它们指向a数组序号为I的元素,而我们的星号p+I或者说星号a+I。是p+I或者a+I所指向的数组元素,那么就是我们的AI这样一个部分,那么大家呢?要注意这样一个部分。那么,

我们来看一下。通过指针引用数组元素,有一个整形数组a,有十个元素要求输出数组中的全部元素。我们来看一下这些方法。首先呢,是下标法。井号includes hdi点hin term in 10定义,一个整形宿主当中有十个元素。inti print,please enter ten int numbers for I=0 I小于10I加加scan f百分号d取a的取AI的地址for I=0。I小于10I加加printf百分号dai,这是我们的通过我们下标法用数组元素来用数组名和下标表示这样一个方法呢,输出我们的这样一个元数组中的元素,最后呢?

printf.反斜百分号反斜杠n。这时候输出我们的这样一个百百分号版权输出我们的这样一个。把反斜杠n那么进行换行,最后呢?return 0还是返回一个零值程序结束,我们再来看一下,通过数组名计算数组元素,找出元素的值。inter map.int音音井号int ludes dn hint May inta 10 inti print,please enter turn in teg lumbers。for I=0 I小于10I加加sky f百分号d取AI的地址,把所有的数据呢放在我们的数组元素当中。for I=0 I小于10I加加。

printf百分号d仅星号a+I,这里呢,是通a+I星号a星号a+I呢表示。a+I所指向的这样一个。数组元素那么星星号a+I呢?表示我们a+I所指向的这样一个数组元素,我们通过数组名和元素序号的计算元素地址找到该元素,最后呢print反反七杠n retarding程序结束。我们再来看一下用指针变量指向数组元素。井号int ludest点hinter minta 10 int星期i printf present ten integrand numbers。for I=0 I小于10I加加sff百分号d取AI的地址for p=a这里的初值呢?是将我们数组首元素的地址了,那么赋给放赋给赋给p那么p呢就指向。我们数组的首。c呢,

就是存放的是我们数组首元素的地址,接下来p小于a+10 p加加。printf百分号d星p我们这里了。它的这样一个循循环表达式的这样一个条件呢,是p小于a+10,那么就是p了,那么它这样一个。要小于。我们这样一个数组元素。a小于我们a+10的这样一个部分,那么小于了我们数组元素了,那么这样一个再加上在第十个后面这样一个位置的这样一个。类型位置的这样一个方式,这样一个部分,那么就p了,

那么就在这样一个。地址的这样一个全。之前的这样一个位置的部分,那么p呢,就小于a+10那么p加加呢,是对p进行自加,那么指向了下一个。数组元素,那么我们用指针呢?指向当前的数组元素,那么星p呢?表示的是。指针p所指向的这样一个数组元素,最后呢,printf反循环n returning程序结束。

那么,第一种方法和第二种方法执行效率是相同的。系统c编译系统呢,是将AI转换成为新AI处理计山计算元素粒子,因此呢,用第一种方法和第二种方法来找数组元素,耗费时多。哦。用第三种方法呢,比第一种和第二种方法快用指针变量呢,直接指向元素,不必每次都重新计算地址。那么,这种有规定的改变地址时批加加人。提高能比较大,

能比较大的,那么比较在一定程度以比较可以的,这样一个有的这样一个程度来提高我们的执行效率。那么,我们用下标法呢?比较直观,能直接知道的是第几个元素,用地址法或?指针变量的方法不直观,难以很快的判断出当前处理的是哪个元素。单用指针变量的方法呢?进行控制可以使程序简洁高效。那么,大家要注意这样一些问题,在使用指针变量的时时候呢?

我们可以通过改变指针变量的指针来指向不同的元素。那么但是我们那么我们如那么我们能不能那么我们不能呢?用改变数组名的方法了。来指向这样一个元素的部分,那么我们因为数组名a代表的是数组元素的地址,它是一个指针型常量。它的值呢?在程序运行期间呢?是不固定不变的,那么既然a是常量,所以a加加呢?无法实现,那么不能呢?用改变数组名的方式呢?来指向不同的这样一个元素的这样一个这样一个这样一个方式。

并且呢,要注意指针变量的当前值。那么,接下来我们再看一下。通过指针变量输出整型数组的a的。十个元素。那么我们看一下右边的这个程序。井号includes dd二点hinterminteria 10星p=a那么p的初值,是AA指向p指向a0。printf please enter ten integrands for I=0 I小于10I加加sky f百分号d。p加加。p=a那么重新使p呢指向a0。那么for。I=0 I小于10I加加p加加printf百分号d星p。printf反型二零反型2n print r零零,

那么这是我们通过指针变量呢?输出我们整型数轴a的这样一个十个元素。那么我们看一下这样一个部分。我们假设我们来看一下这样一个使用的方式,我们假设了p开始时指向数组a的首元素,那么就是p=a那么p加加呢?是使p指向下一个元素a1。星p呢,是得到下一个元素a1的值,那么星p加加这里没有括号,那么就是星p加加。那么,由于呢?星号和加加同优先级那么一样的,那么我们加加加了又同优,

那么运运算的这样一个部分呢?那么,我们结合方式呢?自左而右,因此呢,它等价于星号p加加。也就是说,先引用p的值实现。新p的运算,然后呢,再使p的值呢自增一。然后我们再来看这里,再来看这,再来看这样一个部分星号p加加这里呢,先取拼p的值,

然后呢,使我们的p+1。那么,信号加了p先使p+1再取星p。那么,我们的加加星系呢?我们的表示p所指向的元素值加一,如果p=a,则相当于加加a0,如果a0的值为三,那么a0的值了,那么就变为了四。我们这里呢是元素a0的值加一,而不是指针p的值加一,如果p指向当前a数组中的第I个元素AI,

那么则。星号p减减相当于。AI减减先对p进行新运算,再进行自行p进行自检。星号加加p相当于a加加I,先是p之加再进行星号运算,星号减减p相当于进行a减减I。先是p自检,再进行星号运算,那是我这我们的这样一个运用的,这样一个用的方式。我们再看一下,用数组名做函数参数。比如说我们这样一个例子,当中inter May void fine inter ever intern。

这是对我们的泛函数的声明。泛error时用数组名做函数的参数we的泛inter error intern就是定义我们的泛函数。error是时参数组名error是形参数组名用数组名做函数参数的时候呢,由于形参数组中各元素的值发生变化。时差数组元素的值呢,也会随之发生变化。在该函数被调用时。系统呢,会在泛函数中呢,建立一个指针变量error,用来存放了从主调函数传过来的时参数组首元素的地址。如果在泛函数中呢,用运算符set of测定hour所占的字节数呢?那么可以发现,我们的s ever的值了了吗?

是另外这些使用的这样应用的部分。那么当error呢?只收接收了时参数组的首地址之后呢?error就指向时参数组首元素,也就是指向我们的error 0。我们来看一下以变量名和数组名作为函数参数的比较,那么当我们的时差类型呢?是变量名。那么可以是数组名要求形参的类型呢?那么是变量名,或者说数组名,或者说指针类型。传递的信息呢?是变量值,或者说是时参数组首元素的地址,

通过函数调用,能否改变时参的值呢?那么,如果是变量名的话,就不能改变时差变量的值,如果是数组时差类型是数组名的话,就能够改变参数组的值。C语言调用函数的虚实结合的方法呢,都是采用了值传递的方式,当用变量名作为函数参数时,传递的是变量值。当用数组名作为函数参数的时候呢,由于数组名代表的是数组首元素地址,因此传递的只是地址。所以要求形参呢,

为指针变量实参数组名呢,代表一个固定的地址,或者说指针常量,但形参数组名呢,并不是一个固定的地址,而是按指针变量处理。在函数进行虚实结构之后呢,形参的值呢,就是实参数组首元素的地址,在函数执行期间呢,它可以再被赋值,那么这是我们用数组名呢,作为函数参数的这样一个部分。那么,我们如果一个形参数组想要在函数中改变此数组元素的值实参和形参呢?

那么对应关系呢?有这样一些情况。第一种形参和实参都用数组名。比如说我们这里,我们这些例子当中的。fa那么和我们的in tx那么形参和实参呢,都用数组名第二种情况。实参用数组名形参用指针变量,那么我们这里的fa和我们的f in tx实参用数组名形参用指针变量。第三种情况时,参和形参都用指针变量,那么就是我们的fp和f in tx星x,那么形参和实参呢?都用指针变量。第四种情况,

实参为指针变量,形参为数组名,那么也就是说。时参呢in tfp是我们的指针变量in tx是我们的数组名,那么就是我们。时参和形参呢,对应的这样一个关系。那么我们再来看一下,通过指针引用多维数组。我们来看一下这样一个数组inta三四,那么后面是这样一个值的部分,这是我们的一个二维数组。二维数组呢a代表的是二维数组名,也就说指向一维数组a0就是a0行的起始地址。比如说a这个AA这个。

a这个数组名呢,它是我们的。一个地址代表的是也也指向我们的指向是一个指向的是我,是我们的一个地址,它指向我们的一维数组a0就是a0行的起始地址。那么,我们来看一下我们第一行呢?那么是a0的这样一个进行的这样一个预开始的这样一个部分。第二行是a1的,这样一个具体的这样一个部分,第三行呢是a2这样一个实现的这样一个部分,那么a1呢这样一个。选择了这样一个部分呢,是指向一位数组a0就是零行的起始地址。那么a0新a+0。

星a它只表示的是第零行,第零零行零列元素的地址。那么a+1和星号和我们的星号,我们的取地址a1,它表示的是指向第一行的。起始地址。a1和星星号a+1,这里呢,指向的表示的是一行零列元素a一零的地址。a1+2星号a+1。加二。取地址a一二,它表示的是第一,一行二列元素a1,二的地址。

仅星号a1+2和星号星a+1+2和a一二表示的是一行二列元素的a一二的地址,它是一个元素值。那么,我们来看一下这个部分a呢?它表示的是我们二维数组的名称,它指向的呢?是我们的一维数组a0,那么就是指向的是零。是我们的行开每一行的这样一个。实施的这样一个运行的。组成的这样一个开始的部分,那么就是银行的起始地址,那么这些a0呢?它表示的是。这一列的。

起始地址,这某一行某一列的这样一个起始地址,比如说我们的a0新a+0新a,它表示是某一行。某一列的这样一个元素的这样一个地址的这样一个部分,那么这是另外一个。那么,其他的这样一个位置的列的这样一个方面的这样一个部分,那么这是我们元素的地址的不多于数组元素的地址的这样一个方式。C语言中的地址信息呢,既包含位置信息,也包含它所指向的数据的类型信息a0呢,是一维数组名,它是一维数组中的起始元素的地址。2 AA是二维数组名,

它是二维数组的首行起始地址,二者的纯地址呢是相同,但它们的基类性不同,比如说它们指向的数据类型不同,前者呢,是整形数据,后者呢,是医。一维数组,那么前者呢?是我们这这样一个整形数据,那么后者呢?是一维数组。如果用一个指针变量PT来指向此一位数组了,那么我们可以定义为。

int.新PT 4。那么表示了PT指向由四个整型元素组成的一维数组,此时整型变量a的g类型呢?是由四个整型元素组成的一维数组。好,我们来看一下,用指针引用字符串。用字符数值呢?存放一个字符串,那么可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名呢和格式声明符百分号s输出该字符串。用指针指向变量呢?指向一个字符串常量,通过字符指针变量呢?

用字符串常量,那么我们看一下这个例子,定义一个。字符数组在其中存放I love China输出,该字符的字符串和第八个字符,那么我们看一下这个程序inter main char tree。方括号I love China定义字符数组string printf百分号s反循环string用我们百分号s的格式呢?输出string可以输出整个字符串。然后呢?printf百分号c返现in string 7用百分号c的格式呢?输出一个字符数组元素return 0,那么最后是我们这样一个程序运行的结果。那么就是我们I love China以及呢c,那么这是一个运行的这样一个表示的,这样一个实验的,

这样一个部分,那么我们再看一下通过。指针字符,指针变量输出一个字符串。char星号。string=I love China,这是定义字符指针变量string。并初始化printf百分号s返向in s输出字符串return 0,那么这里呢?就是通过字符指针变量呢?输出一个字符串。在C语言中呢,只有字符变量,没有字符串变量。那么,

我们可以定义了char星号string=I love China,或者定义char string string=I love China,把字符串的第一个元素的地址呢?赋给字符指针变量string。string被定义为一个指针变量基类型呢,为字符型,它只能指向一个字符类型数据而不能。指向多个字符数据。这里呢,只是把我们的这样一个I love China第一个字符的地址呢,赋给我们的指针变量string可以对指针变量再进行赋值,比如说。string=I am a student对指针变量string呢,重重新赋值,可以通过字符指针变量呢,

输出它所指向的字符串。比如说printf百分号s返向s drain百分号s呢,可以对字符串进行整体的输入,输出百分号s呢,是输出字符串时所使用的格式符。在输出项中呢,给出字符指针变量名是最则系统呢,会输出使最所指向的字符串的第一个字符,然后使使最加一。指向下一个字符,然后再输入该字符,直到了遇到字符集串结束,标志法七杠零为止。那么,在内存中呢?

字符串最后呢?被自动加上一个反斜杠零。那么我们再来看一下,用函数调用,实现字符串的复制,第一个呢?用字符数组名作为函数参数。我们这里呢,是way的copy stream char from char two,那么chara等于后面的这样一个字符串char b呢,是后面这样一个字符串。那么,这里呢?copy string AB用字符数组名作为函数时差,我们来看一下这个函数位的copy string char from char two。

inti.while from I不等于反斜杠n,反斜杠0 to I=from。ii加加two I。等于返星二零,那么这是呢?把我们的这样一个数组当中的这样一个字符字符呢?那么赋给我们的另外一个赋给我们另外一个字符数组当中的这样一个元素,这样一个这样一个这样一个方这样一个类方式这样一个类方式。这样一个部分,然后最后呢?那么然后并且呢?那么这个I呢?自增一那么这个变量的自增1I加加。那么最后呢?

我们这样一个,再加上一个反斜杠零那么作为我们字符串的结束的这样字符串的结束,这样一个部分。我们再来看一下。用指字符型指针变量做时差,那么为的。copy string char from char two就是函数的声明。那么这个函数呢?是我们的copy stream from to那么时差呢?为字符。指针变量,我们这里定义的是我们恰星号from=a星to=b,那么from呢,指向a数组首元素to指向b数组首元素。那么我们看一下这个函数。

void copy string char from char two,那么还是我们的inter I=0,那么from I from I不等于反差零。那么,进行一个这样一个字符的,这样一个赋值的,这样一个部分,那么最后呢?再加上一个在我们这个数组后面呢数组元素当中呢,加上一个反星杠零,那么这样反星杠零。我们这里呢。时函数的时参copy string那么使用的是from to,那么我们的时参呢?作为我们时参呢?

是我们的字符指针变量,通过我们的值传递,那么这样一个。传调用我们函数的这样一个方式。我们指针变量from呢,是a数组元素的地址,首元素的地址指针变量to的值呢,是b数组首元素的地址,它们作为时差把a数组首元素的地址呢和b数组首元素的地址呢传递给行参数主名。from和to,它们实质上也是指针变量。那么,这样一个运用的方式。那么,指针字符指针呢?

作为函数参数的时候,呢形参和实参呢?有这样一些对应关系,实参呢?是字符数字名。形参呢,也可以是字符数组名实参呢,是字符数组名形参呢,可以是字符尺寸变量。实参呢,是字符指针变量形参呢,可以是字符指针变量形参,是字符指针变量形参呢,可以是字符数组名,那么这是我们它之间的对应关系的这样一个部分。

那么,我们来看一下使用字符,指针变量和字符数组的比较,字符数组呢?由若干个元素组成,每个元素中呢?存放一个字符。而字符指针变量存放的是地址,就是地字符串,第一个字符的地址赋值的方式中呢?可以对字符指针进行赋值,但是不能对数组名进行赋值。那么,我们初始化了,那么可以是char星号AI love China,

或者说char星号AA=I love China也可以呢?char÷14=I love China。但是呢,我们不能,但是呢,我们不能够把不能够对我不能够对我们的不能够把它复制复复制给我们的。字符数组,字符数组不能够呢,复制给我们的字符数组,那么不能够写为char string 14。street方括号I love China不能写成这样一个负值的,这样一个形式。指针变量的值呢?可以改变,而字符数指名呢?

代表一个固定的值呢?不能改变字符数组中的各元素的值呢?可以改变,可以再对它们赋值,但指针变量指向的字符串常量中的内容呢?是不可以被取代的。那么,比如说看我们,看我们看一下这样一个。那吧,我们看一下我们,我们看这样一个,我们看这,我们看这样一个使使用的这样一个部分下a方括号。house a 2=r那么可以进行赋值的这样一个部分,

上心d=house那么b 2=r那么不能够这样。赋值那么不能够这样赋值的方式,不能够这样一个赋值啊,不能就啊,不能这样赋值。用指引,用数组元素呢?对数字符数组呢?可以用下标法引用一个数组元素,也可以用用地址法引用数组元素。如果定义了指针变量p,并使它指向数组的首元素,可以用指针变量带下边的形式啊,引用数组元素。那么同样呢,

可以用地址法引用数组元素。用指针变量指向一个格式字符串,可以用它代替print函数中的格式字符串。好同学们,那么今天呢?我们给大家讲了这样一个使用指针的,这样一个方式,包括了我们指针的定义,指针的运用方式以及了。指向数组的。那么,指针的这样一个部分,那么同学们呢?下来之后呢?那么再看一下这个部分,

那么进行一下熟悉,咱们进行一下了解好,我们今天的课呢?就讲到这里。


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

本版积分规则

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

GMT+8, 2024-5-19 17:51 , Processed in 0.076412 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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