欢迎来到天天文库
浏览记录
ID:57016284
大小:44.00 KB
页数:27页
时间:2020-07-26
《指针操作课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第14章指针操作指针是C语言的重要概念,也是C语言的一个重要特点。在学习本章内容时,要十分小心,多思考,多比较,在实践中掌握它。指针与地址;指针和指针变量;指针和数组;指针和函数。14.1指针与地址在计算机中,内存是以字节为单位的连续存储空间,每一个字节都有一个编号,这个编号称为地址。(1)任何变量在其生存期内都占据一定数量的字节。(2)内存单元的地址与内存单元的内容是不相同的。(3)一个变量的内存地址称作该变量的指针。14.2指针和指针变量变量的内存地址就是变量的指针。指针变量顾名思义,就是用来存放内存地址的变量,也就是用来存放指针的变量。14.2.1指针变量的定
2、义假设p变量用来存放字符型变量所占用的存储单元的首地址,同时,假定已用某种方式将字符型变量c所占用的内存单元的首地址赋给了p变量,那么,想通过变量p取得字符变量c中的内同,可以按照以下步骤进行:(1)根据变量p所占用的内存单元的首地址,读取其中所存放的数据,该数据就是字符变量c所占用的内存单元的首地址。(2)根据第一步取出来的地址以及字符变量所占用的存储单元的长度,读取字符变量c的值。指针变量定义的一般形式为:类型说明符*标识符;一般变量的定义形式为:类型说明符标识符;int*a;//该指针变量指向数据为整型数据float*b;//该指针变量指向数据为浮点型数据用变
3、量的地址给指针变量赋值,要求变量的类型必须与指针变量的类型同。我们这样为指针变量赋值:intb;int*a=&b;/*b表示一个整型变量,下同*/或int*a;a=&b;/*将变量b的地址存放到指针变量a中,因此a就“指向”了b*/int*p;p=null;/*赋空值null*/14.2.2指针变量的引用在讲指针变量引用之前,先介绍两个有关的运算符。&:取地址运算符。作用是获取变量的地址。形式为:&变量。例如:&a是获取变量所占内存空间的首地址。*:取内容运算符。作用是取指针变量指向的内容。形式为:*指针变量名。例如:*p表示指针变量所指向内存单元中的数据。(1)将
4、指针变量指向被访问的变量(先指向)P=&a;(2)访问所指变量(再取值或赋值)取值:b=*p;赋值:*p=100;特别的,如果在一个表达式中同时出现“&”和“*”,一定要小心的分析该表达式。“&”和“*”两个运算符的优先级别相同,但按自右而左的方式进行结合。例如:&*a;很明显的,a是一个指针变量,按照自右而左的顺序进行结合,首先取a指向的变量,然后再对该变量取地址,结果仍然是a。乘法运算符“*”与取内容运算符“*”书写方法相同,但是这两个运算符是完全不相同的,两者之间没有任何联系。同样,位运算符“&”与取地址运算符“&”之间也没有任何联系。14.2.3指针的运算指
5、针变量同普通的变量一样,可以进行多种运算。对指针变量可以进行赋值运算、取地址运算、取内容运算、加减算术运算、关系运算。1.&和*运算&和*运算符的优先级同++--!等运算优先级别相同。并且是自右向左的结合方式。*(++p)p的地址先加1然后取值*++p取地址p加1后的值*(p++)先取p的值,然后p指针加1*p++先取p的值,然后p指针加1++(*p)先取p的值,然后值加12.赋值运算赋值运算的一般形式为:指针变量=指针表达式(1)可以将一个指针变量的值赋给相同类型变量的一个指针变量。例如:inta,*b,*c;b=&a;c=b;(2)可以将数组的首地址赋值给指针变
6、量。例如:inta[10],*b;b=a;3.算术运算(1)指针变量与整数相加、减将指针加上或减去某个整数值,表示将指针向前或向后移动n个数据单元。如:inta[5],*b,*c;b=&a[1];c=b+2;(2)指针变量的自增、自减运算变量自增、自减的一般形式为:p++,p--,++p,--p其中p为指针变量。4.关系运算指针变量之间的关系运算与一般变量之间的关系运算方式是相同的。【例14-8】14.3指针和数组一个变量有地址,一个数组同样有地址。不同的是,一个数组包含有若干个元素,每个元素都要占据内存空间,且数组占据的内存空间也是连续的。指针变量既然可以指向变量
7、,也可以指向数组。因此,在引用数组元素的时候,可以用下标法(如a[6]),也可以使用指针法,即通过指向数组元素的指针找到所需的元素。使用指针法能够使目标程序质量高:占内存少,运行速度高。14.3.1数组的指针和指向数组的指针变量一个变量有地址,一个数组元素包含若干个数组元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址,这个地址就可以用指针来实现存储。例如:inta[5];int*p,*q;p=&a[0];q=&a[2];*p=5;*q=8;若:p=a;/*或写成p=&a[0];*/则:p+1&a[1]*(p+1)a[1]p+i&a[i]*(p+
此文档下载收益归作者所有