资源描述:
《C语言程序设计 教学课件 作者 姜海涛《C语言程序设计》第七章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第七章指针主要内容基本概念1指针作为函数参数2指针与数组3指针与字符串4指针数组和指向指针的指针5指向函数的指针和返回指针的函数6应用实例7本章要点指针与地址的概念指针变量与指针作为函数参数指针和数组的联系用指针处理字符串指针数组与指向指针的指针指针与函数本章学习目标掌握指针的概念以及指针做函数参数的作用掌握通过指针对数组进行操作的方法掌握数组名做函数参数的含义和用法掌握通过指针对字符串进行操作的方法理解指针数组以及指向指针的指针的含义和作用理解函数指针的作用7.1基本概念7.1.1指针和地址每一个字节对应唯一的一个编号。这个编号实际上就是地址,通过某一个地址可以唯一地定位到某一个字节。程
2、序中使用的常量、变量在运行时要占据一定数目的连续的内存单元,计算机就通过这些内存单元的地址寻找并使用它们。有时,我们把某个变量的地址存储在另外的变量里,这种存储了地址的变量我们通常称之为指针变量。7.1.2定义指针变量指针变量定义的一般形式类型名*指针变量名;例如:int*p;float*q;指针变量的含义inta=5;int*pa=&a;apa20001000510005paa7.1.2定义指针变量(续)需要注意的是,指针变量是有类型之分的。int*p;float*q;通过变量p中存放的地址,可以找到另外一个int类型的数据,而通过变量q中存放的地址,找到的是一个float类型的数据。类型
3、名限定的是指针变量指向的数据的类型。int*p;/*p只能指向int类型数据*/float*q;/*q只能指向float型数据*/char*s;/*s只能指向char类型数据*/7.1.2定义指针变量(续)指针变量也可以和其他变量一起定义。如:inta,b,*p,c[10];7.1.3指针的基本运算1.&运算符定义指针变量后,编译器会为指针变量分配存储空间,但并不会使指针变量指向一个数据。在使用指针变量前,对其进行初始化是至关重要的。一种初始化指针变量的方法是将已经定义的变量的地址赋给它。为了得到变量的地址,可以使用运算符&。int*p,c;p=&c;/*将把c的地址赋值给变量p,p即为“指
4、向变量c的指针”*/7.1.2定义指针变量(续)另外,我们也可以在定义指针变量的同时对其进行初始化。例如intc;int*p=&c;/*将变量c的地址作为指针变量p的初始值*/注意:&运算符只能用于变量(包括指针变量),但不能用于表达式、常量等。7.1.2定义指针变量(续)2.*运算符运算符*是间接寻址或间接引用运算符。当它作用于指针时,将访问指针所指向的变量intx=1,y=2;int*ip;ip=&x;y=*ip;最后一个语句相当于:y=x;7.1.2定义指针变量(续)当指针变量ip指向变量x后,通过变量名可以访问变量x,通过*ip也可以访问变量x,这是两种等价的访问变量的方法。通过变量
5、名x访问变量是直接访问,编译器会将变量名x映射为变量x的地址,通过地址直接定位到变量x的存储空间。借助于指针变量ip访问变量x是间接访问,这时首先要访问指针变量ip,获取指针变量的值即变量x的地址,然后通过变量x的地址访问变量。7.1.2定义指针变量(续)【例7-1】通过指针变量访问变量/*程序7-1*/#includevoidmain(){intvar1=1,var2=89,tmp;int*pVar1,*pVar2;pVar1=&var1;pVar2=&var2;tmp=*pVar1;*pVar1=*pVar2;*pVar2=tmp;printf("var1=%d,var
6、2=%d",var1,var2);}程序中并没有直接交换变量var1和var2的值,但是通过两个指针pVar1和pVar2分别间接地访问了变量var1和var2,从而实现了两个变量值的交换。7.1.2定义指针变量(续)除了*和&运算符之外,赋值操作符也可以用于指针变量。只有相同类型的指针变量之间可以互相赋值。【例7-2】指针变量的赋值操作/*程序7-2*/#includevoidmain(){intvar1=1,var2=89;int*pVar1,*pVar2,*tmp;pVar1=&var1;pVar2=&var2;tmp=pVar1;pVar1=pVar2;pVar
7、2=tmp;printf("var1=%d,var2=%d",var1,var2);printf("*pVar1=%d,*pVar2=%d",*pVar1,*pVar2);}程序中变量var1和var2的值并没有被交换,两个指针变量pVar1和pVar2的值通过临时变量tmp完成了交换。它们之间的赋值之所以成立,是由于三者的类型都是int*。7.2指针作为函数参数C语言中函数参数传递是值传递,形参值的