欢迎来到天天文库
浏览记录
ID:50084386
大小:2.11 MB
页数:97页
时间:2020-03-08
《C语言程序设计与数据结构教学课件刘信杰C语言程序设计与数据结构 课件第08章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章指针C语言程序设计与数据结构教学提示:指针是C语言的精华部分,通过利用指针可以描述复杂的数据结构,很方便地使用数组和字符串,并象汇编语言一样处理内存地址,使程序精练、高效。另一方面,不正确的指针使用是危险的,轻则影响到结果的正确性,重则会导致系统瘫痪。对初学者来说除了要正确理解有关概念外,还必须要多编程多上机调试。教学要求:本章要求掌握指针变量的定义,理解地址就是指针的的概念,一维数组的指针与指向一维数组的指针的区别,指针与字符串、函数的关系,指针变量作函数参数时参数的传递方式,返回指针值的函数定义形式以及指向函数的指针变量
2、定义。C语言程序设计与数据结构8.1地址与指针概述如果我们在前面的编程中定义或说明了变量,编译系统就为已定义的变量分配相应的内存单元(一般把存储器中的一个字节称为一个内存单元),为了能正确地访问这些内存单元,可以为每个内存单元编上号,根据一个内存单元的编号就可准确地找到该内存单元。内存单元的编号也叫做地址,通常也把这个地址称为指针。也就是说,每个变量在内存中会有固定的位置,即具体的地址。变量的数据类型不同,它所占的内存单元的数目也不相同。C语言程序设计与数据结构若我们在程序中已有如下定义:inta=1,b=2;floatx=3.4
3、,y=4.5;doublem=3.124;charch1='a',ch2='b';那么编译系统可以按下面方法为变量分配内存。变量a,b是整型变量,在内存中各占2个字节;x,y是实型,各占4个字节;m是双精度实型,占8个字节;ch1,ch2是字符型,各占1个字节。由于计算机内存是按字节编址的,设变量的存放从内存2000单元开始存放,则编译系统对上述变量在内存中的一种可能存放情况如图8.1所示。变量a在内存的地址是2000,占据两个字节2000和2001后,变量b的内存地址就为2002。以此类推,变量m的内存地址为2012等。另外内存
4、地址都是整形数,不会出现小数。C语言程序设计与数据结构图8.1不同数据类型变量在内存中占用的空间C语言程序设计与数据结构指针变量存放变量地址的变量称为指针变量。如果将变量a的地址保存在内存的特定区域,用变量pa来存放这些地址,这样的变量pa就是指针变量。因此,一个指针变量(如pa)的值就是某个变量(如a)的地址(也称为某变量的指针),也称为pa指向变量a,或者说pa是指向变量a的指针变量。既然pa是变量,那么指针变量pa不但可以存放变量a的地址,也可以存放变量b的地址。有些书上把指针变量简称为指针。为了避免混淆,我们约定:“指针”
5、是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。C语言程序设计与数据结构定义指针变量对指针变量的类型说明包括三个内容:指针类型说明,即定义变量为一个指针变量;指针变量名;变量值(指针)所指向的变量的数据类型。其一般定义形式为:类型说明符*变量名;其中,*表示其后面的变量是一个指针变量,变量名即为定义的指针变量名,类型说明符表示指针变量所指向的变量的数据类型。C语言程序设计与数据结构定义指针变量例如:int*p1;其中的*表示p1是一个指针变量,变量名为p1,它的值只能是某个整型变量的
6、地址,或者说p1指向一个整型变量。至于p1究竟指向哪一个整型变量,应由向p1赋予的地址来决定。但一个指针变量只能指向同一种类型的变量,如下面的p3只能指向浮点型变量(如前面的x或y)而不能指向字符型变量。再如:double*p2;/*p2是指向double型变量的指针变量*/float*p3;/*p3是指向浮点型变量的指针变量*/char*p4;/*p4是指向字符型变量的指针变量*/C语言程序设计与数据结构指针变量的赋值与引用指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造
7、成系统混乱,甚至死机。指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。设已定义下面两个变量:inta;int*p,*q;/*定义指向整型变量的指针变量p和q*/如果想把整型变量a的地址赋予指针变量p,首先要知道a的地址。C语言提供了一些运算符来实现此功能。1、取地址运算符&2、指针运算符*(或称“间接访问”运算符、取内容运算符)C语言程序设计与数据结构取地址运算符&在C语言中,变量的地址是由编译系统分配的,用户无需知道变量的具体地址。C语言中提供了专门的取地址运算符&来表示变量的地址。取地址运算符&是单目运算符
8、,其结合性为自右至左,其功能是取变量的地址。其一般形式为:&变量名;如&a表示变量a的地址。在前面章节的scanf函数中,我们已经使用了&运算符。取地址运算符&只能作用于对变量和数组元素,而不能作用于表达式、常量。C语言程序设计与数据结构要把整型变
此文档下载收益归作者所有