如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第七讲-指针本章教学内容、要求重点与难点指针指针的概念二、举例如有定义:charc=‘A’;inta=3;则所占内存情况如下:三、指针与指针变量1、指针:简单地说,指针就是地址。二者是同一个概念的两种说法。只不过指针更形象一些,就像一个针一样,可以指向某个内存单元。什么是指针变量呢?我们回忆一下什么叫整型变量?2、指针变量:指针变量就是一个变量,和我们以前所讲的其它变量没有本质区别。不同之处在于这种变量中所存放的内容是地址。四、直接访问和间接访问假设有两个上锁且放着物品的盒子A、B:如果你有A盒子的钥匙,则可以直接打开A盒子将物品取出;如果你有B盒子的钥匙,而A盒子的钥匙在B盒子中,要想取出A盒子中的物品,则必须先打开B盒子,取出A盒子的钥匙,再打开A盒子将物品取出。上面两种情况就是直接访问和间接访问的概念。1、直接访问通过变量本身对变量进行存取的方式,称为直接访问。如定义:intx;则x=10;x+=5;这种访问方式只需要变量本身就得到了该变量的全部信息,不需要其它内容,是直接的。2、间接访问通过指针变量实现对变量的访问方式称为间接访问。首先要定义一个指针变量,然后将一个同类型变量的地址赋给该指针变量(这时我们称指针变量指向该变量),这样就可以进行间接访问了。间接访问的过程是:由指针变量得到变量的地址,根据该地址找到变量的存储区,再对该存储区的内容进行存取,从而实现了对变量的间接访问。指针变量的定义和引用4、赋值:可以进行初始化,也可以使用赋值语句(1)、初始化:inta,*s=&a;int*f=NULL;(2)、赋值语句inta,*s;s=&a;(3)、不能给指针变量赋以整型量或其它地址量。如:int*p;则p=2000;是错误的(4)、注意:只能用同类型变量的地址进行赋值!如定义:int*s;floatf;则s=&f;非法(5)、指针变量定义后必须明确指向哪个存储单元。否则使用指针变量是十分危险的!不定二、指针变量的引用1、两个运算符:&与*&:取地址,注意与作位运算符时的不同(双目)*:指针运算符(间接访问符),取内容,*P表示P所指向的变量,注意与乘运算符不同(双目)2、说明a.&既可作用于一般变量,也可作用于指针变量b.*只能作用于指针变量,*s等同于变量a。c.定义指针变量时的*与该处的含义不同d.优先级别相同。e.结合是自右向左方向结合。3、指针变量可以进行的操作(1)赋值:inta,*p1=&a,*p2;p2=p1;(2)输出:printf(“%x”,p1);(3)增减:p1++;p2--;p1+=4;(只能和一个整数)(4)取内容:*p1=5;a=5;printf(“%d”,*p1);(5)比较:一般与指针常量NULL进行比较;当两指针变量同时指向一连续数据区(如数组)时,通过指针值的大小比较判断其指向关系。(6)相减:两个指针变量可进行相减,相减结果表示两指针之间的元素个数。[例1]#include<stdio.h>main(){inta1=11,a2=22;int*p1,*p2;p1=&a1;p2=&a2;printf(“%d,%d\n”,*p1,*p2);p2=p1;printf(“%d,%d\n”,*p1,*p2);}[例2]#include<stdio.h>main(){inta1=11,a2=22;int*p1,*p2,*p;p1=&a1;p2=&a2;printf(“%d,%d\n”,*p1,*p2);p=p1;p1=p2;p2=p;printf(“%d,%d\n”,*p1,*p2);}[例3]#include<stdio.h>main(){inta1=11,a2=22,t;int*p1,*p2;p1=&a1;p2=&a2;printf(“%d,%d\n”,a1,a2);t=*p1;*p1=*p2;*p2=t;printf(“%d,%d\n”,a1,a2);}三、指针作为函数的参数1、形式:只需要形式参数名前加上一个*即可。如:voidtest(int*pointer,charf,char*s)2、说明参数的传递是值传递,单向的(从实参到形参)。这样改变形参的值不改变实参的值。通过指针作为参数可以将主调函数中某变量的地址传递到被调函数中,从而可以改变该地址对应变量的值,即改变主调函数中变量的值。但如果形参本身改变了,其值不会传给实参。[例4]#include<stdio.h>voidtest(int*pt);main(){inta=11,*p=&a;printf(“beforecall,a=%d,p=%x\n”,a,p);test(p);printf(“aftercall,a=%d,p=%