C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章

上传人:w****i 文档编号:92478233 上传时间:2019-07-10 格式:PPT 页数:120 大小:596KB
返回 下载 相关 举报
C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章_第1页
第1页 / 共120页
C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章_第2页
第2页 / 共120页
C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章_第3页
第3页 / 共120页
C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章_第4页
第4页 / 共120页
C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章_第5页
第5页 / 共120页
点击查看更多>>
资源描述

《C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章》由会员分享,可在线阅读,更多相关《C语言程序设计实用教程 教学课件 ppt 作者 魏海新 李燕第8章(120页珍藏版)》请在金锄头文库上搜索。

1、2019/7/10,C语言程序设计教程,1,8.1 指针与指针变量 8.2 指向数组的指针变量 8.3 指向字符串的指针变量 8.4 指针数组与命令行参数 8.5 指针与函数 8.6 指针小结,第 8 章 指针,2019/7/10,C语言程序设计教程,2,教学提示 “指针”是C语言中广泛使用的一种数据类型,运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构,实现动态内存分配,不但能很方便地使用数组和字符串,还能像汇编语言一样处理内存地址,从而编出精练而高效的程序。但是,由于指针概念较复杂,使用较灵活,初学者常常感到较难理解,因此,学习时必须从指针的概念入手,正确理解指针及指

2、针在数组和函数方面的应用。 教学目标 要求学生掌握指针的概念和运算规则,掌握用指针访问变量、一维数组和二维数组的方法,以及用指针处理字符串的方法。通过多编程、多上机调试程序来体会指针的概念及其使用的规律,并应用于实际的编程中。,2019/7/10,C语言程序设计教程,3,8.1 指针与指针变量,8.1.1 指针的概念 1.内存与内存地址 内存地址:内存是计算机用于存储数据的存储器,以一个字节作为存储单元,为了便于访问,给每个字节单元一个唯一的编号,第一字节单元编号为0,以后各单元按顺序连续编号,这些单元编号称为内存单元的地址 。 变量地址:变量所分配存储空间的首字节单元地址(字节单元编号)。,

3、2019/7/10,C语言程序设计教程,4,2、变量、变量名、变量的地址、变量值 每个变量都通过变量名与相应的存储单元相连系,具体分配哪些单元给变量,由编译系统完成变量名到对应内存单元地址的变换。 变量分配存储空间的大小由类型决定。 变量的值则是指相应存储单元的内容。,2019/7/10,C语言程序设计教程,5,3、指针、变量的指针和指针变量 指针:就是 “内存单元的地址”。指针指向一个内存单元。 变量的指针:就是“变量的地址”。变量的指针指向一个变量对应的内存单元。 指针变量:就是地址变量。地址(指针)也是数据,可以保存在一个变量中。保存地址(指针)数据的变量称为指针变量。,2019/7/1

4、0,C语言程序设计教程,6,系统为特殊变量p(用来存放地址的)分配的存储空间地址是4800,p中保存的是变量a的地址,即4000,当要读取a变量的值12345时,不是直接通过a变量,也不是直接通过保存12345的内存单元的地址4000去取值,而是先通过变量p得到p的值4000,即a的地址,再根据地址4000读取它所指向单元的值12345。,这种间接的通过变量p得到变量a的地址,再存取变量a的值的方式即为“间接存取”。 通常称变量p指向变量a,变量a是变量p所指向的对象,2019/7/10,C语言程序设计教程,7,4、变量值的存取通过变量在内存中的地址进行存取,系统执行“scanf(”%d“,”

5、时,存取变量a值的方式可以有两种: 直接访问直接利用变量的地址进行存取。 1)上例中scanf(“%d”,&a)的执行过程是这样的: 通过变量名a找到变量a的起始地址3000;然后将键盘输入的值(假设为)送到内存单元3000和3001中。此时,变量a在内存中的地址和值,如图8.4所示。,2019/7/10,C语言程序设计教程,8,间接访问通过另一变量访问该变量的值。 语言规定:在程序中可以定义一种特殊的变量(称为指针变量),用来存放变量的地址。,例如上例定义了这样一个指针变量p,它被分配到4000、4001单元,其值可通过赋值语句“p=a;”得到。此时,指针变量p的值就是变量a在内存中的起始地

6、址3000,如图8.4所示。通过指针变量p存取变量a值的过程如下:,2019/7/10,C语言程序设计教程,9,2019/7/10,C语言程序设计教程,10,5.指针的概念,在语言中,用指针来表示一个变量指向另一个变量这样的指向关系。 所谓指针即地址。 一个变量的指针即该变量的地址,如4000就是指向变量a的指针。 指针变量:专门存放地址的变量,如p即是一个指针变量,它存放的是a的地址4000。,2019/7/10,C语言程序设计教程,11,8.1.2 指针变量的定义与初始化 1. 指针变量的定义 基类型 *指针变量名; 例:float *p1; (定义p1为指向实型变量的指针变量) char

7、 *p2; (定义p2为指向字符型变量的指针变量) 在指针变量定义中,*是一个说明符,它表明其后的变量是指针变量,如p是指针变量,而不要认为“*p”是指针变量。 指针变量定义时指定的数据类型不是指针变量本身的数据类型,而是指针变量所指向的对象(或称目标)的数据类型 指针变量存放的是所指向的某个变量的地址值,而普通变量保存的是该变量本身的值 指针变量并不固定指向一个变量,可指向同类型的不同变量,2019/7/10,C语言程序设计教程,12,(1) 指针运算符与地址运算符 与指针引用有关的两个运算符:&与* &:取地址运算符 *:指针运算符,或称指向运算符、间接访问运算 符。 指针指向的对象的表示

8、形式: *指针变量 此处*是访问指针所指对象的运算符,与指针定义时的*不同。,2. 指针变量初始化,2019/7/10,C语言程序设计教程,13,(2) 指针变量初始化,若有定义: int a,*p; 语句仅仅定义了指针变量p,但指针变量并未指向确定的变量(或内存单元)。因为这些指针变量还没有赋给确定的地址值,只有将某一具体变量的地址赋给指针变量之后,指针变量才指向确定的变量(内存单元)。 指针变量初始化:在定义指针时同时给指针一个初始值 如: int a,*p=,2019/7/10,C语言程序设计教程,14,8.1.3 指针变量的引用,与指针引用有关的两个运算符: (1)&:取地址运算符 (

9、2)*:指针运算符(或称间接访问运算符),2019/7/10,C语言程序设计教程,15,有定义: int a,*p= 注意:*与&具有相同的优先级,结合方向从右到左。这样,&*p即&(*p),是对变量*p取地址,它与&a等价;p与&(*p)等价,a与*(&a)等价。,2019/7/10,C语言程序设计教程,16,8.1.4 指针运算,1. 指针的赋值运算 (1)将变量地址值赋给指针变量,使指针指向该变量。 设有如下定义: int a,b,*pa,*pb; float *pf; 第一行定义了整型变量a,b及指针变量pa,pb。pa、pb还没有被赋值,因此pa、pb没有指向任何变量, 下面语句完成

10、对pa,pb的赋值: pa=,2019/7/10,C语言程序设计教程,17,例如: int j,k; int *pointer1,*pointer2; pointer1=,2019/7/10,C语言程序设计教程,18,(2) 相同类型的指针变量间的赋值,pa与pb都是整型指针变量,它们间可以相互赋值,如:pb=pa; 即 pa,pb都指向变量a,此时a、*pa、*pb是等价的。指针指向变化如下图:,注意:只有相同类型的指针变量才能相互赋值,如pf=pa;是不允许的。因为pa是整型指针,pf是浮点型指针。,2019/7/10,C语言程序设计教程,19,()给指针变量赋空值,给指针变量赋空值,说明

11、该指针不指向任何变量。 “空”指针值用NULL表示,NULL是在头文件stdio.h中预定义的常量,其值为,在使用时应加上预定义行,如: #include “stdio.h“ int *pa=NULL; 亦可以用下面的语句给指针赋“空值”: pa=0; 或: pa=0; 这里指针pa并非指向0地址单元,而是具有一个确定的“空值”,表示pa不指向任何变量。 注意:指针虽然可以赋值0,但却不能把其它的常量地址赋给指针。例如: pa=4000; 是非法的。,2019/7/10,C语言程序设计教程,20,例 8.1 指针定义与初始化,main() int a,b; int *pointer_1,*po

12、inter_2; a=100;b=10; pointer_1= ,2019/7/10,C语言程序设计教程,21,程序运行结果: 100,10 100,10,2019/7/10,C语言程序设计教程,22,例8.2 从键盘上输入两个整数到a、b,按由大到小输出。,#include main( ) int a,b,*pa= /* pa指向大数,pb指向小数*/ ,2019/7/10,C语言程序设计教程,23,若输入: 12 22 输出结果: a=12,b=22 max=22,min=12,(b) (c) 指针变化示意图,2019/7/10,C语言程序设计教程,24,2. 指针的算术运算,(1) 加减

13、运算: 一个指针可以加、减一个整数n,其结果与指针所指对象的数据类型有关。指针变量的值应增加或减少“nsizeof(指针类型)”。 加减运算常用于数组的处理。对指向一般数据的指针,加减运算无实际意义。例如: int a10,*p=a,*x; x=p+3; /*实际上是p加上3*2个字节赋给x, x指向数组的第三个分量*/ 对于不同基类型的指针,指针变量“加上”或“减去”一个整数n所移动的字节数是不同的。例如: float a10, *p=a, *x; p=p+3; /*实际上是p加上3*4个字节赋给x, x依然指向数组的第三个分量*/,2019/7/10,C语言程序设计教程,25,(2) 自增

14、自减运算,指针变量自增、自减运算具有上述运算的特点,但有前置后置、先用后用的考虑,务请小心。 例如: int a10, *p=a, *x; x=p+; /* x第一个元素分量, p指向第二个元素*/ x=+p; /* x、 p均指向数组的第二个分量*/ * p+相当于*(p+ +)。 *(p+)与(*p)+ 含义不同,前者表示地址自增,后者表示当前所指向的数据自增。,2019/7/10,C语言程序设计教程,26,2. *&a的含意是什么? (答:a ) 3. (*p)+相当于什么? (答:a+ ),思考: 1.若有定义 int a,*p; 执行了“p=&a”,则: “&*p”的含意是什么?,(

15、答:相当于&a ),2019/7/10,C语言程序设计教程,27,3.指针的关系运算,与基本类型变量一样,指针可以进行关系运算。 在关系表达式中允许对两个指针进行所有的关系运算。若p,q是两个同类型的指针变量,则:pq,p=q都是允许的。 指针的关系运算在指向数组的指针中广泛的运用,假设 p、q是指向同一数组的两个指针,执行pq的运算,其含义为,若表达式结果为真(非值),则说明p所指元素在q所指元素之后。或者说q所指元素离数组第一个元素更近些。 注意:在指针进行关系运算之前,指针必须指向确定的变量或存储区域,即指针有初始值;另外,只有相同类型的指针才能进行比较。,2019/7/10,C语言程序设计教程,28,8.2 指向数组的指针,数组名代表了数组的首地址(即第一个数组元素的地址)。根据指针的概念,数组的指针是指数组在内存中的起始地址,而数组元素的指针是指数组元素在内存中的地址。由于数组的各元素在内存中是连续存放的,所以利用指向数组或数组元素的指针变量来使用数组,将更加灵活、快捷。,2019/7/10,C语言

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号