资源描述:
《C语言程序设计 教学课件 作者 吴赟婷 卢钢 第8章 指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第8章指针8.1指针与指针变量8.2指针与函数8.3指针与数组8.4指针与字符串8.5指针运用举例8.1指针与指针变量8.1.1指针的概念计算机内存被分成一个一个字节,这些连续的字节都有属于自己的一个地址编号,这个编号就是存储单元的地址。例如,定义一个inta;在内存中分配连续的四个字节给int型的变量a使用。虽然a的四个字节都有地址编号,但是把第一个字节的地址当成a的地址,即&a为2000地址是存储单元的编号,指针就是地址8.1.2指针变量专门用来保存其它变量的地址值的变量,称为指针变量。1.指针变量的定义定义格式如下:基类型*指针变量名例如:int*p;/*定义了一个用来指向整型变量的指
2、针变量p*/float*q;/*定义了一个用来指向实型变量的指针变量q*/说明:①基类型约束指针变量只能保存基类型变量的地址。所以,int*p;意味着p只能保存int型变量的地址。②“*”在指针变量定义语句中只是一个身份标识,表明此处定义的是用来存储其他变量地址的指针变量,而不是普通变量。③不管基类型是什么,作为指针变量,只能保存地址值,不能用来随便保存其它的数据,否则会出错或造成不可预知的不良后果。2.指针变量的使用定义了一个指针变量,我们就可以用它来存储其他变量空间的地址了。例如:1.int*p;2.float*q;3.intx=3;4.floaty=4.5;5.p=&x;/*把一般整型
3、变量x的地址存储在指针变量p中。*/6.q=&y;/*把一般实型变量y的地址存储在指针变量q中。*/7.printf(“%x,%x”,p,q);8.printf(“%d,%f”,*p,*q);说明:①在给指针赋地址值时,在类型上应该保持一致,如果上例有p=&y,则是错误的。②只能给指针变量赋合法的存储空间地址,不能给指针变量赋值一个随便的整数值。如int*p;p=2000;这是不合法的。一般有下面几种值可以赋给指针变量:第一,通过取地址符号“&”来获得变量的地址然后赋值给指针变量,如p=&x;第二,还可以把相同类型的指针变量进行赋值。如int*p,*r,x;p=&x,r=p;第三,还可以给指
4、针变量赋NULL值,事实上,为了保证指针访问的安全性,我们在定义了一个指针变量时,一般都要给其赋初值,或者给它赋NULL值。如int*t=NULL;③第7条语句的作用是输出指针p和q存储的x与y的地址值。请注意是地址值,不是3和4.5。④关于“*”的含义。☆在定义的地方出现时,只是作为一个身份标志,表面其后面定义的是一个指针变量。★作为指向运算符。如*p的作用是把指针p里面保存的地址(即x的地址)取出,并按照该地址去找到对应空间(x的空间),最后取出该空间里面的数。因此,若有int*p,x=3;p=&x;则之后出现的*p可以看成等价于变量x。printf(“%d”,*p);printf(“
5、%d”,x);*p=5;x=5;当如果有以下定义:int*p;double*q;intx=3;doubley=4.5;p=&x;q=&y;内存分配结构如下图8.2指针与函数在函数中,函数定义和使用都涉及到两种参数(形参和实参)。当形参被定义成一般数据类型时,函数调用则采用单向的值传递进行传值,当形参被定义成指针类型时,采用的则为双向的地址传递传值。【例8-1】用两种不同的传值方式实现两个整数交换的函数,并在主函数中调用它们来交换两个整数。#includevoidswap1(intx,inty)/*使用普通单向值传递作为参数*/{intz;z=x;x=y;y=z;}void
6、swap2(int*x,int*y)/*使用指针作为参数是双向地址传递*/{intz;z=*x;*x=*y;*y=z;}main(){inta,b;scanf("%d%d",&a,&b);printf("调用swap1函数前:a=%d,b=%d",a,b);swap1(a,b);printf("调用swap1函数后:a=%d,b=%d",a,b);printf("调用swap2函数前a=%d,b=%d",a,b);swap2(&a,&b);printf("调用swap2函数后a=%d,b=%d",a,b);}再来考虑下面这个程序,看看结果又如何?#include7、h>voidswap(int*x,int*y){int*z;z=x;x=y;y=z;}main(){inta,b;scanf(“%d%d”,&a,&b);printf(“调用前a=%d,b=%d”,a,b);swap(&a,&b);printf(“调用后a=%d,b=%d”,a,b);}这里一样使用指针做参数,为什么函数调用却没影响实参的值呢?注意这里实际交换的是什么?8.3指针与数组数组给编程者带来