虎贲C语言第八章.ppt_第1页
虎贲C语言第八章.ppt_第2页
虎贲C语言第八章.ppt_第3页
虎贲C语言第八章.ppt_第4页
虎贲C语言第八章.ppt_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 指针,_ 虎贲讲师:路谨铭,_,章节知识点:,8.1 地址和指针的概念 8.2 指针变量 8.3 指针与数组 8.4 指针与字符串 8.5 指针的指针 8.6 指针与函数,笔试考点分布,机试考点分布与分析,8.1 地址和指针的概念,8.1.1 内存单元的地址 计算机硬件系统的内存储器中,拥有大量的存储单元。一般把存储器中的若干个字节称为一个存储单元。为了方便管理,必须为每一个存储单元编号,这个编号就是存储单元的地址。每个内存单元都有一个惟一的地址,根据一个内存单元的地址即可准确地找到该内存单元。,8.1.2 指针的概念 指针其实就是地址。一个变量在内存单元的首地址称为该变量的“指针”,

2、通过变量的指针可以找到该变量所占用的内存单元。,例如:int x,y;,指针变量,就是专门用来存放内存地址的变量。它是一种特殊的变量,它的特殊之处就在于它的变量值是地址(即指针),而一般的变量的值的是普通的数据。 8.2.1 指针变量的定义 C语言规定所有变量在使用前必须先定义,指针变量也不例外。指针变量的定义形式如下: 类型名*指针变量名; 例如: int *p , *q;,8.2 指针变量,float *s; char *t;,8.2.2 指针变量的引用 C 语言中对指针变量的引用是通过两个运算符“ int *p; x = 10; p = ,8.2.3 指针变量的初始化,指针变量在使用之前

3、必须对其进行初始化,使指针变量指向一个确定的内存单元。一般形式为: 类型说明符*指针变量名初始地址值; 例如: int a = 10; int *p = /*定义p为一个指针变量,且指向变量a*/,1、赋值运算 指针变量的赋值运算只能在同一数据类型之间进行,有以下几种形式。 int *p1, *p2, a, s5; int *p1 = /* p1和p2都是指针变量,把p2的值赋给p1 */,8.2.4 指针的运算,2、算术运算 指针进行算术运算主要是对指针变量加上或减去一个整数,这样会使指针变量指向相邻的存储单元,这其实就是指针移动。只有指针变量指向一片连续的存储单元时,指针的移动才有意义。

4、例如:在内存中有一片地址连续的存储单元,基类型为int类型的指针变量p指向地址为1002的存储单元,若执行了操作p = p + 1, 则指针变量p指向了首地址为1006的存储单元, 3、关系运算 指针的关系运算其实就是比较地址值的大小。设p、q是指向同一数据集合的指针变量,如果pq的值为真,则表明p指针变量所指向的元素在q指针变量所指向的元素之后;反之则在之前,,章节知识点:,8.1 地址和指针的概念 8.2 指针变量 8.3 指针与数组 8.4 指针与字符串 8.5 指针的指针 8.6 指针与函数,8.3 指针与数组,8.3.2 指针与一维数组,8.3.1 指针与一维数组,8.3.1 指针与

5、一维数组,C语言规定,数组名代表数组的首地址。一维数组中,第一个元素的地址即为该数组的起始地址。,1、建立指针变量与一维数组的联系,例如,要创建一个指向某个int型一维数组a的指针变量pa,可先定义: int a6, *pa; 然后对指针变量赋值: pa=a;或pa= p = a+1等价于 p = a; 我们可以使用p0来表示p指针指向的内存单元,使用p1标示p指针指向的内存单元的下一个内存单元。也就是说可以用p0表示a0,p1表示a1。,因此,对数组元素ai可以有4种等价的引用方法: ai;pi;*(a+i);*(p+i)。 对应的,ai的地址也有4种等价的方式: ,二维数组元素的地址可以由

6、表达式 如: int *p3;,int *p3,a32,i,j;,p0,p1,p2,a21,a20,a11,a10,a01,a00,指针数组指向二维数组,for(i=0;i3;i+) pi=ai;,2)通过指针数组引用二维数组元素,当p数组的每个元素指向a数组每行的开头时,a数组中的元素aij与*(ai+j)和*(pi+j)是完全等价的。因此,可以通过指针数组p来引用a数组元素,它们的等价形式如下: *(pi+j)与*(ai+j)对应 *(*(p+i)+j)与*(*(a+i)+j)对应 (*(p+i)j与(*(a+i)j对应 pij与aij对应,4、 行指针,1)定义行指针 行指针的一般定义形

7、式如下: 类型名 (*指针数组名)常量表达式;,如:int (*p)2;,2)通过行指针引用二维数组元素 如有以下定义: int a32,(*p)2; p = a; 当p指向a数组的开头时,可以通过以下形式来引用aij: *(pi+j)与*(ai+j)对应 *(*(p+i)+j)与*(*(a+i)+j)对应 (*(p+i)j与(*(a+i)j对应 pij与aij对应,从定义格式上看,指针数组int *p3与行指针int (*p)2极为相似,但二者却又本质区别。 int *p3表示一个数组,它含有三个元素p0, p1, p2,且这三个元素只能存放整型元素的地址; int (*p)2表示一个指针变

8、量,它仅有一个存储空间,只能存放一个长度为2的一维数组的指针。,5、指针数组与行指针的区别,章节知识点:,8.1 地址和指针的概念 8.2 指针变量 8.3 指针与数组 8.4 指针与字符串 8.5 指针的指针 8.6 指针与函数,8.4 指针与字符串,在C语言中,可以通过字符指针来处理字符串。 (1)指针与字符串例如:char *p = China; 或者char *p ; p = China;,(2)指针与字符数组 char str=China, *pstr = China;,8.5 指针的指针,指针变量也是变量,也有地址。我们通常把用来保存指针变量地址的变量叫做二级指针,或者叫做指针的指

9、针。 二级指针的说明形式如下: 类型名*指针变量名; 例:如有以下定义: #include main( ) int a=10,*pa,*ppa; pa = ,8.6 指针与函数,8.6.1 函数指针变量 在语言中,一个函数也是占用一段连续的内存空间,而函数名和数组名一样也表示该函数所占内存区的首地址(或者叫函数的入口),所以函数名也是一个地址常量。那么此时我们也可以把函数的这个首地址赋予一个指针变量,使该指针变量指向该函数。我们把这种指向函数的指针变量称为“函数指针变量”。 函数指针变量定义的一般格式: 类型说明符 (*指针名)(); “类型说明符”表示函数的返回值类型。(* 指针名)表示“*

10、”后面的变量是定义的指针变量。,例如: int (*p)( );,例8.7:本例用来说明用指针形式实现对函数调用的方法。 #include int he(int a,int b) int sum; sum=a+b; return sum; main() int he(int a,int b); int (*p)(); int x,y,z; p=he; scanf(%d%d, ,我们知道对于函数而言,它的返回值有字符型、整型或者浮点型,这节课我们将介绍函数返回值类型为指针型数据的函数。这种函数的一般格式为: 类型说明符 *函数名(参数表列); 类型说明符表示函数的返回指针所指的数据的数据类型。 如: int *p(int x,int y) . ,8.6.2 指针型函数,在C语言中,运用指针是一种复杂但是非常高效的方式,而且指针可以解决复杂问题。学完本章,我们应该学会: 指针变量的定义 (1)int *p p是一个指针,指向一个整型数据。 (2)int *p() p是一个函数,该函数返回值为指针类型。 (3)int (*p)() p是一个指针,指向一个函数。 (4)int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论