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