罗泽兵 发表于 2024-4-15 08:49:48

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

好同学们,大家好,今天呢,我们给大家讲解一下我们C语言程序设计当中的善于使用指针,那么这样一个部分。指针呢,是C语言中的一个重要概念,也是C语言的一个重要特色。掌握指针的应用,可以使程序简洁,紧凑,高效。学习C语言呢,应当学习和掌握指针,可以说我们掌握了指针呢,

那么也就说掌握了。C语言的主要部分。指针的概念呢,比较复杂,使用呢也比较灵活,因此呢,我们在刚开始学习的时候呢,可能会出错。那么所以呢,我们在学习这个指针这一方面的这个时候呢,我们要非要仔细多思考,多比较。那么。在应用中呢,进行掌握。

通过前面几章的学习呢,我们已经知道在定义变量的时候呢,系统呢,会给该变量分配内存单元。编译系统呢,根据程序中定义的变量类型分配一定强度的空间。比如说我们的to PC二点零为一个整型变量呢,分配两字节。VS how C加加六点零为一个整形变量呢?分配四字节,那么这是不同的,这样一个部分。内存区的每一个字节呢,有一个编号,那么就说我们内存的每一个字节呢,

有它的这样一个编号的部分。这个编号呢?它就是我们内存单元的地址,这个地址呢?就是内存单元的它的地址部分。它相当于了我们一个呃酒店中的房间号。在地址所标志的内存单元中,是存放数据,那么这就相当于呢?在我们酒店房间中的这样一个旅客,那么是一样的。由于通过地址能找到所需的变量单元,可以说地址呢,指向该变量单元,那么我们打一个比方。

一个房间的门口挂了一个房间号,二零零八那么这个二零零八呢?就是我们房间的地址,或者说二零零八。指向该房间,因此呢,我们在C语言中呢,将地址我们形象化的称为指针,意思呢,就是通过它,我们就能够找到以它为。地址的内存单元。比如说我们举一个例子。定义了整型变量。a和b。

编译系统呢,在对程序编译时呢,给我们这两个整型变量呢,都分配了我们的内存单元,也就是我们的存储空间。每个变量呢,都会有相应的起始地址。我们呢?可以。通过。他的这样一个地址呢,来进行查找进行访问。我们如果呢?比如说我们将变量名。a我们对这个变量呢进行赋值。

把a呢赋予三系统,根据变量名a呢查出它相应的地址二零零零,然后将整数三呢存放到地址呢,为二零零零的这样一个存储单元中。这样直接通过变量名进行访问呢,我们称之为直接访问。如果我们将变量a的地址呢,放在另一个变量中,然后通过后面的变量呢,来找到变量a的地址,从而访问变量a,那么我们称之为呢?间接访问。那么,我们来看一下这样一些部分。

如果在程序中定义了一个变量,在对程序进行编译时呢,系统就会给这个变量呢,分配内存单元。编译系统根据程序中定义的变量类型,分配一定长度的空间,内存区的每一个字节呢,都有一个编号,这就是地址。由于通过地址呢,能找到所需的变量单元,那么可以说地址呢,指向该变量单元将地址呢形象化的称为指针。C语言中的地址呢?包括位置,

信息,内存,编号或称为纯地址和它所指向的数据类结构的这样一个类型信息,或者说它是带类型的地址。存储单元的地址呢?和我们存储单元,它所存放的这样一个自身的内容呢?那么是不同的两个概念。在程序中呢,一般是通过变量名来引用变量的地址,直接按变量名进行访问呢,称为直接访问。那么,将变量的地址呢?存放在另一变量中呢?

然后通过该指针变量呢?来找到对应的变量的地址呢?称为间接访问。那么,这是我们指针的这样一个定义。那么,首先呢,我们我们来看一下指针变量。那么我们看一下这个指针变量的例子,通过指针变量呢访问整型变量。那么看一下这个程序型号interludes dl点hinter main inter a=10 b=10定义两个整型变量,并为a赋初值100。b赋初值时,int仅星号pointer杠一。星号pointer杠二,

那么我们的这是定义指向整型数据的指针变量,pointer杠1 pointer杠二。那么,我们在定义指针变量时呢?左侧呢?应该有类型名,否则呢,就不是定义指针变量,比如说我们这里呢?我们定义的。指针变量。是int型的,是指向我们int型的这样一个整形数据,是指向整形数据的整形变量,所以说int新。

换成了一。新point 2那么我们再来看一下,接下来呢,我们的这样一个pointer。1 point 2它就是我们的指针变量,它当中呢,可以存放我们变量的地变量的这样一个地址的这样一个类型信息。类型变量的这样一个信息,比如说我们这样一个。符号a这里呢表示取a这个变量的地址,将a的地址呢赋给指针变量point 1。将b的地址呢赋给指针变量point 2,那么这就是把变量a的地址呢赋给一个指针。把变量b的地址呢赋给另外一个指针变量,接下来point printf a等于百分号db等于百分号d反斜杠nab。

这是输出变量a和b的值,那么我们再来看一种另外的输出方式。printf.星星号pointer杠一等于百分号d星号pointer杠二等于百分号d反星杠n星号pointer杠一星号pointer杠二,这里呢也是输出我们的这样一个。变量a和b的值,那么我们的星号point杠一呢?就是我们变量a的值星号point杠二,那么就是我们变量。b的这样一个值。那么,这是我们通过指针呢,访问整形变量的这样一个部分。我们来看一下,我们要定义指针变量的时候呢,

左侧呢应该有类型名,比如说这个int要有这个类型名。比如说int型号point杠一,那么必须有指定指针类型的基类型。我们来看一下怎么样来指定定义指针变量,它的方式呢?是类型名加上一个星号再写上指针变量的名,比如说我们这个例子。int新point 1杠一,新point杠二,我们左端的int呢是在定义指针变量时必须指定的基类型。指针变量的基类型呢,用来指定此指针变量可以指向的变量的类型,比如说我们的这样一个指针变量呢,它是指向。

什么样的?类型的这样一个变量。嗯。比如说我们前面介绍过的。数据类型int char float,那么既然有这些类型的变量,就可以有指向这些类型变量的指针。因此,指针变量是基本数据派生出来的类型,它不能离开基本类型,而独立存在。那么我们看一下,在定义指针变量时呢?需要注意的问题,首先第一个指针变量前面的星号呢?

表示该变量为指针型变量。指针变量名不包含我们的星号,第二个在定义指针变量时呢,必须指定基类型一个变量的指针内含义呢,包括两个方面。一是以存储单元编号的存地址。一是它指向的存储单元的数据类型。比如说我们不仅呢,我们呢一个呢是要是它的这样一个包括了两个方面呢,一个是它的地址,一个是它的这样一个数据类型。那么,第三个如何表示指针类型,指向整型数据的指针类型呢?表示为int新。

读像读作指向int的指针或简称为int指针第四个。指针变量中呢,只能存放地址就存放我们的指针,那么不不能够呢,将一个整数赋给一个指针变量,那么这是我们定义指针变量时要注意的部分。那么我们看一下这些例子怎么样来使引用指针变量?我们看一下这个程序,这些语句inta。星号p。这是定义了一个整型变量a和一个指向整型变量的指针p。接下来p等于取地址a这里呢,是把a的地址呢?赋给p。那么,

接下来printf百分号d星p,这里的星p呢?表示。我们a的值。星号呢?指我们的是我们的指针运算服务,或称为间接访问运算服务。我们的星p就代表指针变量p所指向的对象。那么我们的。星p呢表示。指针变量p。所指向的对象。那么我们p呢?它是我们a的,这样一我们是把a的地址呢赋予给p。

那么。星p呢,那么就表示a的值,那么星p=1,那么就是把一呢赋给我们。p当前所指向的变量,由于p指向变量a相当于呢,把一赋给a,那么就是我们的a=1。那么我们再看一下printf百分号。OP这是以八进制的形式啊,输出指针变量的值由于p呢,指向a相当于输出a的地址,那么就是我们的取地址a相当于取输出a的地址。那么,

大家要注意,要熟练的。掌握两个有关的运算符,第一个呢是我们的取地址运算符,比如说我们取地址a,它表示的呢?是我们变量a的地址,那么就是a的变量的这样一个地址。星号表示的是指针运算符或称为间接访问运算符。我们的星p就代表指针p所指向的这样一个对象。那么就是说我们。两个这样一个一个是取地址服务,一个是指针运算服务,那么大家呢?要注意这个部分。

那么,我们来看一下怎么样来引用指针变量输入a和b两个整数,按先大后小的顺序呢?输出a和b。那么我们这里呢,不交换整型变量的值,而是交换两个指针变量的值,就是a和b的地址,我们来看一下。int星p1,星p2,星pab。我们这里星p1,星p2和星p它的类型呢是?指向。

整型的变量的指针。接下来printf press enter to integrand numbers sky f百分号d,百分号d取a的地址,取b的地址输入两个整数,把输入的数据呢放在我们的变量eb当中。接下来p1等于取缔值a,把变量a的地址呢赋给p1,把变量b的地址呢赋向p2,那么这样呢p1呢就指向了变量a。p2指向的是变量b,那么接下来我们再进行比较,if a小于b,如果呢?a和a比b小的话,那么我们交换两个指针。

变量的值。那么就p=p 1p一=P 2P二=p一,那么就是交换两个指针变量的值,接下来printf a等于百分号db等于百分号dab。printf max等于百分号,dm in等于百分号。d返程in星期一星期二,那么我们这里呢?是输出a和b的值再来。输出我们p1和p2所指向的变量的值。那么,最后呢?return 0函数返回一个零值程序,结束a和大家注意,这里注意就注意a和b的值,

并未改变它们仍保持原值,但我们指针的值呢?改变了。那么,这指针的值改变了,那么你说我们原来的这样呢?是p1指向的AP,二指向的b。如果我们a小于b的话,那么就交换两个指针变量的值,那么最后呢,进行输出,那么这是原来是指针变量的值,那么如果没那如果是其他的情况,如果a。

不是小于b的话。那么我们也是这样一个指针的值的部分,那么这是我们交换可以了。对指针的值呢进行改变,那么。产生了时时间的这样一个方式。我们再来看一下。对输入的两个整数呢?按由按大按大小顺序输出,用我们用函数进行处理。而且呢,用指针类型的数据呢,作为函数参数。我们看一下程序in term。为的swap。

swap int星p1 int星p2,这是对函数进行声明,函数的指指函数的参数呢?是两个指针变量。一个呢是两个函数的形参呢,是我一个呢,是星期一一个呢,是星期二。接下来inta bint 7 pointer杠1 int 7 pointer杠二定义两个,这int型的指针变量。print present era and b3f百分号d百分号d取地址a取b的地址将我们输入的两个整数呢放在我们的变量AB当中。接下来,point杠一等于取缔值a,使point 1呢?指向a point杠二=b等于取缔值b,

使point 2呢?指向b。if a小于BS wat swap pointer杠1 pointer杠二,那么如果a小于b了,那么就调用swap swap函数,我们这里的pointer杠一和pointer杠二是两个指针。那么,它作为我们swap swap函数的这样一个实参,那么进行使用将这样一个实参的值呢?传递给我们的形参那么进行调用这个函数?那么,最后呢?printf m max等于百分号d百MM in等于百分号d反斜杠nab输出,我们的结果。retard 0谈程程序结束,

我们看一下这个程序,看一下这个这个定义的函数void swap。ssswa pint星p1 int星p2定义swap函数int temp temp。ta temp呢等于星p1。星p1等于星p2,星p 2=temp。那么我们这里呢,是使我们的星期一。和星期二。交换。那么这样一呢,是交换a和因为我们的星p1呢,表示的是a我们星p2呢,表示的是b,那么这里呢?

他是对他的这样一个。位置的。方面的这样一个。区域的类型的这样一个。地址情况呢?进行运用的这样一个部分,那么这里呢?就能就交换了a和b的值,而拼p1和p2的值呢?不变。那么我们看一下指针变量,作为函数参数函数的调用呢?那么可以,而且只可以得到一个返回值。对吧,

就是我们的函数值,而使用指针变量做参数呢,可以多得到多个变化了的值。那么,如果不使用指针变量呢?是很难做到这一点,所以我们要善于利用指针法。如果想通过函数调用n个要改变的值,那么可以这样做,在主调函数中呢?设置n个变量。用n个指针呢,指向它们设计一个函数,有n个行指针形参在这个函数中呢,改变n个形参的值。

在主调函数中呢,调用这个函数在调用时呢,将这n个指针变量呢,做时差将它们的值呢,也就是相关变量的地址呢,传递给函数的形参。在执行该函数的过程中,通过形参尺寸变量改变它们所指向的n个变量的值。主调函数中呢,就可以使用这些改变的值的变量,那么这是我们指针变量的作为函数参数。那么我们再来看一下输入三个整数ABC要求按由大到小的顺序来将它们输出,用函数实现我们看一下这个程序。井号includes dn点h标准的输入,输入库函,

数头文件编译出来的8n的程序当中inter main inter是函数使用的数据类型,面对的是我们的主函数。两个大括号之间呢,是我们的函数体就是函数的功能部分为的exchange int新q1 int新q2 int新q3,这是对我们定义的这个函数呢进行声明。函数的参形形式参数呢?是我们的int星q1 int星q2 int星q3 in tabc in tp 1 pint星期二星期三。这是对我们的变量呢,做定定义我们的变量。print please enter three numbers style if百分号d,百分号d,百分号d取a的地址,取b的地址,取c的地址,那么将我们输入的这样一个数据呢?

存放在我们的这样一个变量当中。p1等于取缔值a将a的地址呢?赋给我们的放在p1当中。pp 2等于取地址b将b的地址呢?放在p2当中p3等于取地址c将c的地址呢?放在p3当中。exchange pp 2p3 print for the order is百分号d,百分号d,百分号d返型na BC,那么这是我们输入我们最后的这样一个。顺序的这样一个值的部分return 0还程序结束,我们来看一下我们的这样一个函定义的函数。首先呢,是y的。一个是欠据。

这样一个函数,这是将三个变量的值呢?进行交换的函数。接下来进行一个函数声明y的swap,那么这是我们要使用的这样一个函数呢?我们要进行声明int新PT 1 int新PT 2函数声明。if新q1小于新q2 swap q1q2,如果a小于b,那么交换a和b的值。如果if新q1小于新q3交换q1q3的值,如果新q2小于新q3就如果b小于c。那么,我们交换b和c的值,那么这样呢?我们就进行了它顺序的这样一个排列的这样一个。

排序的这样一个部分,按照这样一个顺按照这个大小呢进行排序的这样一个顺序的这样一个部排排序的这样一个部分。那么,我们来看一下这个s swap函数w的swap新int新int。新PT 1 int新PT 2 int temp。temp等于新PT 1。新PT 1等于新PT 2,新PT 2=temp,那么交换了我们指针。变量了。那么所指向的。那这样一个变量,它的变量的值那么这是?进行一个。交换的这样一个方式,

那么最后呢?我们看一下程函数的程序的这样一个结果。那么,输入20负四十五六五十四六十七,那么结果呢?输出这样一个部分,那么这里呢?是用。函数了来实现我们。这样一个数据的大小的顺序的这样一个大小输入输出的这样一个方式,那么这是我们用指针变量呢?作为函数参数的这样一个部分。那么我们再看一下,通过指针引用数组一个变量,有地址一个数组呢,

包含若干元素。每个数组元素呢,都在内存中占用存储单元,它们都有相应的地址指针变量呢,既然可以指向变量,那么也可以呢,指向数组元素。那么就是说把某一元素的地址呢,放在一个指针变量中,所谓数组元素的指针呢,就是数组元素的地址。可以用一个指针变量呢,指向一个数组元素,我们来看一下这里。仅int。

a10定义一个整型数组有十个元素。这是当中存放的这样一个数据,那么定义a呢?为包含十个整型数组的元数据的元数组。int新p就是定义p为指向整型变量的指针,变量p等于取地址a0。这里呢,就是把a0元素的地址呢,赋给指针变量p。那么,引用数组元素呢?可以用下标法也可以呢?用指针法就是通过数指向数组元素的指针呢?找到所需的元素。我们来看一下。

我们在程序中,我们我们程序中的数组名呢,不代表整个数组只代表数组元素的手指。首数数组数组首元素的地址,比如说我们p等于取地址a0,我们把a0的地区第一个元素的元素的地址呢?那么,赋给我们的p那么它,它也等于它,它也是等于了p=a那么a呢?表示的是数组首元素的地址。那么就可以了,把a呢赋给p。那么,我们来看一下,

在定义指针变量时呢,可以对它进行初始化,那么比如说星pp等于取地址a0,那么我们可以呢?把把它写为int星p等于取地址a0或者int星p=a。啊,这是我们的。数组元素的指针的这样一个部分。


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