指针变量的定义与引用.ppt
指针变量的定义与引用,制作人:涂小琴,学习目标:掌握各种类型指针的定义、初 始化;掌握指针的使用方法;理解指针的概念。重点:变量的地址和指针概念的建立,指针变量的定义和引用 难点:指针概念及指针变量的引用,指针:就是地址,就像我们学过的整型、实型等数据类型一样,指针也是一种数据类型。指针变量:是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。指针变量就是存放地址的变量。,指针与指针变量的概念,内 存,图1 内存示意图,内存是计算机用于存储数据的存储器,以一个字节作为存储单元,为了便于访问,给每个字节单元一个唯一的编号,第一字节单元编号为 0,以后各单元按顺序连续编号,这些单元编号即称为内存单元的地址。,内存地址:内存中存储单元 的编号,图2:变量在内存中的表示,int a=5;,变量的地址,变量 a在内存中占了两个字节的存储空间,2000是这段空间的首地址,那么 2000 就是变量 a在内存中的地址。那么程序是怎样访问变量 a的呢?首先,程序必须知道变量a的地址。这就又提出了一个新的问题,变量 a的地址放在哪里,在程序中又是怎样表示的?,图 3 指针和指针变量的关系,指针变量p 在内存中也占有一个空间,指针变量名p 就是这个空间的名称,这个空间里存放的不是普通的值,而是一个地址值。从图中可以看出,这个地址是变量 a在内存中的位置。所以我们就说这个地址或者说这个指针指向整型变量 a,也可以说是指针变量 p 指向整型变量 a。,指针和指针变量,变量的访问方式,直接访问:是指在程序执行过程中需要访问变量值时,直接存取变量所占内存单元中的内容。,间接访问:将变量的地址存放在一种特殊变量中,利用这个特殊变量进行访问。,说明:用变量名对变量的访问也属于直接访问,因为在编译后,变量名和变量地址之间有对应关系,对变量名的访问系统自动转换成利用地址对变量的访问。,图4:直接访问,图5:间接访问,指针变量的定义,为表示指针变量和它指向的变量之间的关系,在C语言中,用指针标示符“*”表示“指向”,反映指针变量与它所指向的变量之间的联系。指针变量的定义仍遵循先定义后使用的原则,定义指针变量与前面介绍的变量定义形式相似,都是用说明语句来实现,定义时应指明指针变量的类型及变量名。其定义形式为:数据类型标识符*指针变量名;如:int*p;/*定义了一个指向整型变量的指针变量 p*/float*q;double*d;,在定义指针变量时同时给该变量一个初始值,称为指针变量初始化。例如:int a=20;int*pa;pa=(&为取地址符),指针变量的初始化,(1)指针变量名前的“*”表示该变量为指针变量,而指针变量名不包含该“*”。(2)一个指针变量只能指向同一类型的变量。(3)指针变量中只能存放地址,而不能将数值型数据赋给指针变量。(4)只有当指针变量中具有确定地址后才能被引用。,指针变量的几点说明,main()int a=18;int*p=/*输出指针变量 p 指向的 目标的值*/程序运行结果:a=18*p=18 两个输出语句输出的结果相同,说明指针变量 p 所指向的目标就是整型变量 a。,例1.输出变量的值,对指针变量的引用包含两个方面:一是对指针变量本身的引用,如对指针变量进行各种运算;二是利用指针变量来访问所指向的目标,对指针的间接引用。与指针相关的两个运算符:(1)&:取地址运算符(2)*:指针运算符,取其指向的内容 指针指向的对象可以表示成如下形式:*指针变量 特别要注意的是,此处*是访问指针所指向变量的运算符,与指针定义时的*不同。在定义指针变量时,*号表示其后是指针变量。在其它位置出现,*号是运算符。如果与其联系的操作数是指针类型,*是间接访问(引用)运算符;如果与其联系的操作数是基本类型,*是乘法运算符。在使用和阅读程序时要严格 区分*号的含义。,指针变量的引用,若有定义:int a=8;int p=说明指针变量p指向整型变量 a,a是p 指向的目标,可以用*p来引用 a,*p 与 a是等价的,因此,*p 可以像普通变量一样使用。注意:*与&具有相同的优先级,结合方向为从右到左。这样&*p 即&(*p)是对变量*p取地址,它与&a是等价的。p 与&(*p)等价,a与*(&a),a与*p 等价。,例2:输入两个整数,按从大到小顺序输出main()int a,b,*p1,*p2,*p;scanf(“%d,%d”,运行情况如下:5,9 a=5,b=9 max=9,min=5,说明:int*pi,pj;该“*”号是指针变量符,表示定义了两个指向整型变量的指针变量,pi,pj没有具体的指向。而printf(“max=%d,min=%dn”,*p1,*p2);语句中的“*”号是对变量 pi,pj所指向单元的值的引用;,谢谢!,