C语言程序设计案例教程第7章 指针.ppt
《C语言程序设计案例教程第7章 指针.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计案例教程第7章 指针.ppt(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C 语言程序设计案例教程第7 章 指针第7章指针指针是C 语言中一类非常重要的数据类型,是C 语言中的重要概念。指针的应用为函数间各类型数据(特别是复杂类型的数据)的传递提供了简洁的方法,可以提高程序的执行效率。另外,有些其他数据类型无法或很难实现的操作,都可以利用指针来完成。指针的概念比较复杂,使用也灵活,难于掌握。要学好C 语言,必须很好地学习指针。7.1指针的定义与应用7.1.1指针概述在计算机内,数据均存储在存储器内,存放一个字节数据的存储器叫一个存储单元。为了便于管理,系统按顺序为每个存储单元进行编号,每个存储单元都具有自己的唯一编号,这个编号就是该存储单元在内存中的地址。当在程序中
2、定义一个变量时,系统就在内存中为该变量分配一个大小合适的存储空间,所需要的空间大小由变量的类型而定,例如,一个整型数组n5 占有25 个字节。在变量定义完成后,变量就在内存中具有了一个唯一的存储空间,变量都存储在有确定地址的存储单元中,变量在内存中具有唯一的地址。对变量的访问,实质就是对变量存储空间的内容进行访问。由于各种变量在内存中所占的存储空间大小不一样,为了便于对变量地址的访问,将变量存储单元的起始地址定义为变量的地址。这样,就可以用另一种方法来访问变量内容,即不通过变量名,而是通过对变量在内存中的地址进行访问。因为在C 语言中存储单元的地址被称为指针,因此这种访问就是指针访问。变量存储
3、空间、变量地址与变量内容的关系就好像是信箱、信箱号码与信件,可以将内存单元看成一个个信箱,存储单元的地址就是信箱的号码,在定义变量时意思就是“将某号码信箱分配给某人使用”,而变量的内容就相当于是信箱内的信件,在给变量进行赋值时相当于“将某某信件放到某号码信箱”。指针就是存储单元的地址,是一个常量,将它保存在一个特殊的变量中,这个变量就叫做指针变量。为了叙述方便,常将指针变量简称为指针。在C 语言中,通常可以直接通过变量名对变量内容进行访问,而无需知道变量在内存中的地址,系统会自动将访问转换为对内存单元的访问,这种通过变量名来对变量存储单元进和访问的方式称为“直接访问”另外,还支持对变量的内存单
4、元进行“间接访问”这种访。问允许将变量的地址赋给另一个特殊的变量,程序中可以利用这个特殊的变量来访问变量的内存单元,这个特殊变量称为指针。在图711 中给出了使用指针进行“间接访问”的图示。图711变量的间接访问其中,变量n是一个int 型变量,它占有两个存储单元,变量n的地址为这两个存储单元的首地址65524,量n的值为100。针变量point 是一个指针,本身存储在地址为1000变指它172的存储单元中,指针变量point 的内容为变量n的地址65524。在这种情况下要对变量n进行访问,可以从指针变量point 中获得变量n的地址65524,再通过该地址65524进行访问。不同数据类型的变
5、量占用的存储单元个数是不一样的,指针point 正是依据它的数据类型来确定变量n占有多少个存储单元。例如,变量n是一个int 型变量,因此可以将point 定义为一个int 型指针,这样,在使用指针point 访问变量n时,程序就知道所要访问的是一个int 型变量,int 型变量占有两个存储单元,因此将对地址从65524开始的两个单元(地址分别为65524和65525)进行访问。7.1.2指针的定义指针变量是一种特殊的变量,用来专门存放变量的地址。指针变量的定义格式如下。【格式1】存储类型类型说明符*变量名1【格式2】存储类型类型说明符*变量名1,*变量名2【功能】格式1用来定义单个指针变量,
6、格式2用来定义多个同类型指针变量。定义指针时应注意以下几点。(1)存储类型”用来说明“变量名”指示的变量的数据存储类型。“(2)类型说明符”用来说明“变量名”指示的变量的数据类型;“(3)每个指针变量前都要加“*”;(4)指针是用来存储对象内存地址的变量,对象可以是简单类型数据(int,char 等),也可以是数组,函数,还可以是另一个指针;(5)指针变量的值只能是内存中存在的一个地址,而不是一个任意的整数。(6)不同类型的指针变量不能互相赋值;(7)不能够将指针值赋给整型变量或无符号整型变量;(8)void*p 表示指针p为无类型指针,即指针p可以用任意类型的指针方式来引用。【例1】下面定义
7、了point1 和point2 两个指针变量,int 表示指针point1、point2 所指的变量是一个整型变量。int*point1,*point2【例2】下面是几种常见的指针变量定义。int*n1/*n1 是一个整型指针变量*/float*fn1/*fn1 是一个浮点型指针变量*/char*sc1/*sc1 是一个字符型指针变量*/char(*sp)5/*sp 是字符数组指针变量,指向一个字符数组sp,它有5个元素*/int*ppn1/*ppn1 是一个指针变量,它是指向一个整型指针的指针变量*/int(*nf1)()/*nf1 是函数指针变量,它指向一个函数,该函数返回一个整型值*/i
8、nt*(*nf2)()/*nf2 是函数指针变量,它指向一个函数,该函数返回指向一个整数的指针*/【例3】下面定义的不是一个指针变量。char*sc15一个字符串的指针*/int*pf()/*sc1 是一个有5个元素的一维字符数组,每个字符数组元素是指向/*pf 是一个函数,这个函数返回指向一个整型值的指针*/7.1.3指针变量的引用在对指针变量的引用中,经常会进行指针变量赋地址数和利用指针间接访问变量。对指173针变量的引用,是由取地址运算符“&”和取值运算符“*”来完成的。1 取地址运算符&取地址运算符“&”在第2章第3节介绍scanf()函数时介绍过。在变量的前面添加取地址运算符“&”可
9、以获得该变量的地址。,【例1】在scanf()函数使用中的“&”运算符是将数据存储到指定的存储空间。例如:intnscanf(“%d”,&n)该程序是以格式符“%d”将输入的数据指定为整型数据,存储到整型变量n地址所指示的存储区域内的存储单元中。【例2】给指针变量所赋的值一定是地址值,可以用“&”加变量名来获取地址,也可以用数组名获得地址(因为数组名表示数组的首地址),还可以用已经保存有变量地址的指针变量获得地址。取地址运算符“&”用来将变量的地址赋给指针变量的示例如下。charSC1=Ainta=189,b=666,m=1floatn=6.18char*point1/*定义字符型指针poin
10、t1*/int*a1p,*bp1/*定义整型指针a1p 和bp1*/float*fnp1/*定义实型单精度指针fnp1*/point1=&SC1/*将变量SC1 的地址赋给指针point1*/ap1=&a/*将变量a 的地址赋给指针ap*/bp1=&b/*将变量b的地址赋给指针bp*/fnp1=&n/*将变量n的地址赋给指针fnp1*/注意:在为指针赋地址时,指针的类型应该与所指地址的变量数据类型一致。取地址运算符&只能用于变量或数组元素,而不能用于表达式或常量。例如,下面是错误的。int*point1,a,n10point1=&(a+10)point1=&1232 取内容运算符“*”在对指针
11、赋予地址值后,在地址指针的前面添加取内容运算符“*”可以获得该指针指,向的变量的值,实现对变量的简介访问。【例3】对于上面定义的指针,可以进行如下的变量访问。该程序执行后,变量SC1 的内容改变为B,变量n的值改为1.2345,变量m 的值改为855。*point1=B*fnp1=1.2345m=*ap1+*bp1/*相当于SC1=B*/*相当于n=1.2345*/*相当于m=a+b*/【例4】下面程序用来将指针point1 指向变量n的值100赋给变量m,将m+1 的值赋给指针point1 指向变量n。intn,m,*point1/*定义两个变量n和m,定义一个指针point1*/n=100
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计案例教程第7章 指针 语言程序设计 案例 教程
限制150内