C语言课件第08讲.ppt
《C语言课件第08讲.ppt》由会员分享,可在线阅读,更多相关《C语言课件第08讲.ppt(45页珍藏版)》请在三一办公上搜索。
1、第八讲,Begin:,第八章 指针,指针和指针变量的概念变量的指针和指向变量的指针变量,8.1.1 地址和指针,存储单元:存放一个字节数据的存储器。存储单元的内容:存储单元中存放的数据。存储单元的地址:存储单元的编号。变量的首地址:变量占据的连续存储单元的起始地址,简称变量的地址。指针:存储单元的地址,是一个常量。,8.1.1 地址和指针,int i;char ch;float f;,i=1;ch=A;f=2.5;,8.1.2 指针变量,指针变量是专门用来存放内存单元地址的特殊变量。当把某个变量i的地址存入指针变量p后,我们就说这个指针变量p指向该变量i。,指向,1000,i的地址存入p,in
2、t i=10,*p;,p=,指针与指针变量的区别,就是变量值与变量的区别,即指针变量的值是指针。例如,可以说变量i的指针是1000,但不能说变量i的指针变量是1000。,8.1.2 指针变量,对内存单元的访问有两种方式:直接访问:直接根据变量名存取变量的值。间接访问:将变量的地址存放在指针变量中,当要对变量进行存取时,首先读取指针变量的值,得到要存取变量的地址,再对该变量进行访问。,8.2.1 指针变量的定义,定义格式:类型说明符*指针变量名;其中类型说明符指的是指针变量所指向变量的数据类型,“*”表示随后的变量是指针变量。例如:int*ptr1;char*ptr2;ptr1是指向整型变量的指
3、针变量,专门用来存放整型变量的地址。ptr2是指向字符型变量的指针变量,专门用来存放字符型变量的地址。,8.2.1 指针变量的定义,说明:1)指针变量中只能存放地址(指针),不能和整型 变量混淆。例如下面写法是错误的:int*ptr1;ptr1=1000;指针变量可以取值为0(NULL),表示该指针变量不指向任何变量。2)指针变量只能存放与它数据类型相同的变量的地址。例如下面写法是错误的:int*ptr1;char ch;ptr1=,8.2.2 指针变量的引用,指针变量可以通过一对互逆的运算符进行引用。取地址运算符“/*将变量ch的地址赋给指针变量ptr2*/,8.2.2 指针变量的引用,指针
4、运算符“*”作用:间接存取指针变量所指向变量的值。例如:int i,*ptr1;char ch,*ptr2;ptr1=,8.2.2 指针变量的引用,说明:1)定义语句中的“*”和执行语句中的“*”含义不同,定义语句中的“*”说明定义的是一个指针变量,而执行语句中的“*”表示间接存取指针变量所指向变量的值。2)指针变量中必须存放了确定的地址值后才能进行指针运算。例如下面写法是错误的:int*ptr1;*ptr1=10;ptr1中存放的是一个随机的地址值,该地址有可能是系统程序已占用存储单元的地址,将10赋值给ptr1所指向对象后,原来的数据被更新,系统有可能遭到很严重的破坏。,8.2.2 指针变
5、量的引用,例 指针运算符的使用,#include void main()int a=50,*p;p=,程序运行结果:*p=50,p=fff4a=100,&a=fff4,8.2.3 指针变量的初始化,一般格式:类型说明符*指针变量名=初始地址值;例如:int i,*ptr1=说明:1)任何指针变量在使用之前必须初始化,使指针变量指向一个确定的内存单元,未经初始化的指针变量禁止使用。2)必须使用同类型变量的地址进行指针变量的初始化。,8.2.4 指针变量的运算,实质:地址的运算类型:指针变量赋值指针变量加/减一个整数两个指针变量比较两个指针变量相减,8.2.4 指针变量的运算,1.指针变量赋值:将
6、已存在对象的地址赋给指针变量例 交换两个指针变量所指向变量的值#include void main()int*p1,*p2,x1=10,x2=20,t;p1=,程序运行结果:*p1=10,*p2=20*p1=20,*p2=10 x1=20,x2=10,8.2.4 指针变量的运算,程序运行结果:*p1=10,*p2=20*p1=20,*p2=10 x1=10,x2=20,例 交换两个指针变量的值#include void main()int*p1,*p2,*t=NULL,x1=10,x2=20;p1=,8.2.4 指针变量的运算,2.指针变量加/减一个整数:指向另一个存储单元例 移动指针变量访问
7、数组元素#include void main()int a10=1,3,5,7,9,11,13,15,17,19;int n=6,*p1,*p2;p1=p2=,程序运行结果:1)*p1=1,*p2=12)*p1=13,*p2=33)*p1=9,*p2=17,8.2.4 指针变量的运算,3.两个指针变量比较:对两个指针变量中存放的地址进行比较例 比较指针变量逆序数组元素#include void main()int a10=1,3,5,7,9,11,13,15,17,19;int*p1=,程序运行结果:a0=19a1=17a2=15a9=1,指针变量的比较运算经常用于数组,判定两个指针变量所指向
8、的数组元素的位置先后。,8.2.4 指针变量的运算,4.两个指针变量相减:当两个指针变量指向同一数组中的不同数组元素时,指针变量相减的差值即为两个指针变量相隔的元素个数。例 相减指针变量逆序数组元素#include void main()int a10=1,3,5,7,9,11,13,15,17,19;int*p1=,程序运行结果:a0=19a1=17a2=15a9=1,8.2.5 指针变量作为函数参数,特点:将变量地址作为实参传送到被调用函数中;遵循“单向值传递”方式(特殊的地址值);被调用函数不能改变实参指针的值,但可以改变实参指针所指向变量的值;可以得到多个返回值。,8.2.5 指针变量
9、作为函数参数,例 交换实参指针所指向变量的值#include void swap(int*x,int*y)/*形参为相同类型的指针变量*/int t;t=*x;*x=*y;*y=t;/*交换指针变量所指向变量的值*/void main()int a=10,b=20;printf(1)a=%d,b=%dn,a,b);swap(,程序运行结果:a=10,b=20a=20,b=10,地址值传递,8.2.5 指针变量作为函数参数,例 交换形参指针变量的值#include void swap(int*x,int*y)/*形参为相同类型的指针变量*/int*t;t=x;x=y;y=t;/*交换指针变量的值
10、*/void main()int a=10,b=20,*p=,程序运行结果:a=10,b=20a=10,b=20,地址值传递,第八章 指针,数组的指针和指向数组的指针变量字符串的指针和指向字符串的指针变量,8.3.1 一维数组的指针和指向一维数组元素的指针变量,数组的指针:数组的首地址。一维数组的指针:一维数组的首地址,也就是一维数组中第一个元素的地址。C语言规定:数组名代表数组的首地址。若有:int a10;则:a 与 a0 是等价的数组元素的指针:数组元素的地址。指向一维数组元素的指针变量:存放一维数组首地址或数组元素地址的变量。,8.3.1 一维数组的指针和指向一维数组元素的指针变量,一
11、维数组的首地址加上偏移量x即可得到其他数组元素的地址。例如:int a10,*p;p=a;/*等价于 p=&a0*/则有:&a1 等价于 a+1 或 p+1&ai 等价于 a+i 或 p+i 注意:p+i指向数组的第i个元素,而不是简单地使指针变量p的值加i。其所代表的地址实际上是p+isize(size为一个数组元素所占的字节数)。,8.3.1 一维数组的指针和指向一维数组元素的指针变量,访问一个数组元素主要有两种形式:下标法:用 ai 的形式存取数组元素。指针法:用*(a+i)或*(p+i)的形式存取数组元素。其中a是一维数组名,p是指向数组元素的指针变量。p的初值为数组a的首地址,可以通
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课件 08
链接地址:https://www.31ppt.com/p-5385179.html