资源描述:
《C语言程序设计 教学课件 作者 徐秋红 第8章指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章 指针指针本章将从以下几个方面讲述指针的概念和作用:指针与地址的关系指针的定义与运算指针在函数中的应用指针在数组中的应用指向指针的指针的含意和使用方法指针在带参数的main函数中的作用指针的定义地址:计算机系统为内存存储区的每一个存储单元(以字节为单位)分配有一个编号。变量的地址:变量的值:指针:存放变量地址的变量被称为“指针变量”,简称为“指针”。指针的定义510061.9-22.05100实型变量a指向实型变量a的指针a_point510460106012内存中用户的数据区……变量的地址变量的值变量实型变量b5104……指向实型变量b的指针b_point指针的定义定义指
2、针变量的一般形式是:基类型 *指针变量名表;以下定义指针变量的形式都是合法的:int*ip,*kp,*u_point;char*ch_p1,*ch_p2;float*a_point,*b_point;a_point=&a;b_point=&b;指针运算取地址运算通过取地址运算符“&”,获到一个变量的地址后赋给指针变量。“&”是单目运算符,它只能求变量或数组元素的地址,求地址运算是不能针对常量值或表达式的。例如:intm=50,*p1,*p2;p1=&m;指针运算指针的赋值运算指针变量在使用时必须有确定的指向,即指针变量应被赋予确定的地址。指针的赋值运算就是将该指针要指向的某个变
3、量的地址赋给这个指针变量,使指针指向该变量。floatx=0,*p1,*p2;p1=&x;scanf("%f",p1);p2=p1;指针运算空指针为了使指针变量有一个确定的数值,除了给指针变量赋一个地址值外,当指针变量没有指向的对象时,也可以给指针变量赋NULL值,此值为空值。例如:double*point;point=NULL;通过指针引用一个存储单元一个指针变量的左侧带有一个“*”号时,这个“*”号的作用是取指针变量所指向地址的内容,或者可以理解为一个“*”号与其右边的指针变量构成的一个整体,可以代表这个指针所指向的存储单元。例如:floatx=-3.35,y,*p;p=&x
4、;y=*p;printf(("x=%f,y=%f",*p,y);通过指针引用一个存储单元“&*p”和“*&x”又表示什么?根据“&”和“*”两个运算符的运算方向为右结合性,所以“&*p”表达式相当于“&(*p)”,因为“*p”就是整型变量x,所以“&(*p)”就是“&x”,即指针p;而“*&x”表达式相当于“*(&x)”,因为“&x”就是p,所以“*(&x)”就是“*p”,即变量x。指针的运算指针的算术运算有以下三种形式:指针与整数的加减运算指针的加1、减1运算指针相减运算指针的关系运算指针与函数指针做函数的参数与普通变量一样,指针变量也可以作为函数的参数。当指针变量作为函数
5、形参时,它的调用形式中的实参也应为指针变量。指针与函数【例1】设计一个专门互换两个变量值的函数,其中函数的参量使用指针变量。voidswap(int*p,int*q){inttemp;temp=*p;*p=*q;*q=temp;}main(){inta,b,*ap=&a,*bp=&b;scanf("%d%d",ap,bp);printf("a=%d,b=%d",a,b);swap(ap,bp);printf("a=%d,b=%d",a,b);}使函数返回一个指针值一般函数运行结束后都可以返回一个函数值,这个函数值可以是整型、实型、字符型等等,同样它也可以是一个指针类型的数值,
6、即一个地址。这种返回指针型数据的函数其定义形式是:数据类型名*函数名(参数表){ 函数体 }使函数返回一个指针值【例2】(2003年4月二级C语言水平考试试题选择题)有程序:int*f(int*x,int*y){if(*x<*y)returnx;/*返回指针变量x*/elsereturny;/*返回指针变量y*/}main(){inta=7,b=8,*p,*q,*r;p=&a;q=&b;r=f(p,q);printf("%d,%d,%d",*p,*q,*r);}执行后输出结果是________。(A)7,8,8(B)7,8,7(C)8,7,7(D)8,7,8指针与一维数组
7、数组的指针与数组元素的指针数组的指针即是指数组的首地址,也就是数组元素下标为0的那个元素的地址。C语言规定,数组名代表数组的首地址,所以,数组名实际上也是指针。例如,以下四种数组说明语句是等价的:intx[15],*p=x;intx[15],*p=&x[0];intx[15],*p;p=x;intx[15],*p;p=&x[0];指针与一维数组例如,有定义语句:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;则用数组名指针a与指针变量p指向数组元素的形式下图