全国计算机二级考试C语言 指针精讲课件
第七章:指 针;第一节:指针概述;如:执行以下说明语句后: int a=3,b=4; float c=4.5,d=8.6; char e=‘x’,f=‘y’;其内存分配情况如图:整型变量a,b占两个字节,若a的地址为1010,则b的地址为1010+2=1012;实型变量c,d占四个字节,若c的地址为1014,则d的地址为1010+2=1018;字符型变量e,f占一个字节,若e的地址为1022,则f的地址为1023;;注意:1:变量的地址是通过‘&’运算符进行计算.例如:上例中&b是计算出变量b的地址1012.以前曾介绍过scanf函数,它的参数中就需要一个变量的地址.如:scanf(“%d”,&b);中的&b,而scanf(“%d”,&b);是表示将数据送入变量b的地址&b所指示的内存单元.从而,得到指针的定义.2:指针:访问变量,首先应找到其在内存的地址,或者说:一个地址唯一指向一个内存变量,我们称这个地址为变量的指针.;二:指针与指针变量 地址犹如要找存储区域的路标,在程序设计语言中被称为指针.对内存中变量的访问有以下两种方式: 1.直接访问:把通过变量名或地址访问程序中一个实 体的存储空间的方式称为“直接访问”. 2.间接访问:把地址存入在一个变量中,然后通过先找出变量中的值(一个地址),再由此地址找到最终要访问的变量的方法,称“间接访问”. 注意:( 1) 存放地址的变量是一个特殊的变量,它只用来存放地址而不能用来存放其它类型. (2)“间接访问”方式的实质:就是把一个变量的地址放在另一个变量中.如图二:;a; 如图二:在内存的另一些单元中设置一些变量,pa,pb,…,pf,分别用来存放变量a,b,…f的地址(即&a,&b,…,&f)。得到pa的值1010(它是变量a的地址),再通过地址1010找到它所指向的存储单元中的值3。 根据图二所示的逻辑关系,可以将它们形象的表示为图三,即一个变量指向另一个变量。在C语言中用”指针“来表示指向关系。所以,所谓“指针”就是地址。一个变量的指针就是指该变量的地址。存放地址的变量,就是指针变量。 如:图二中的pa,pb,…,pf均是指针变量,而从图三可以看出,指针变量pa指向a,我们在理解“指向”的时候,应该理解它指的是:pa中存有a的地址,通过该地址就能找到a。;7.1.2 指针的类型和指针的定义指针是具有类型的,它的类型就是它所指向实体的类型。如:一个指向int类型的指针,一个指向一维数组的指针等。注意:1。在使用一个指针变量之前,先要用声明语句对其定义。 如:int *p;解析:定义了一个指向整型数据的指针变量p,即p是一个存放 整型变量的地址变量。2。定义一个指针变量必须用符号“*”,它表明其后的变量是指针变量,但千万要记住指针变量是“p”,而不是“p”。;3。在定义了一个指针变量之后,系统就为这个指针变量分配一个存储单元,用来存放地址(如:int *p),但此时该指针变量并未指向确定的整型变量,因为该指针变量中并未输入确定的地址。要想使一个指针变量指向一个整型变量,必须将整型变量的地址赋给该指针变量。如:int *p,i=3; p=&i;解析:上面先定义了一个指针变量p和一个整型变量i,i的初值为3,但此时p与i无任何关系,如图a: 然后执行赋值语句“p=&i;”,此时p就指向了i。见图b.;4。指针变量也可以定义为指向实型,字符型以及其它类型的变量。 如:float *p; char *q;7.1.3 指针变量的引用 1。指针变量的引用形式:;(2)在程序的执行语句中引用的“*”是一个指针运算符,如*p 表示“p指向的变量”。【例1】:用指针变量进行输入、输出。 main() {int *p, m; scanf(“%d”,&m); p=&m printf(“%d\n”,*p); };【例2】:说出下列程序的功能。main(0{int *p1, *p2, i1, i2; scanf(“%d,%d”,&i1,&i2); p1=&i1; p2=&i2; printf(“%d,%d\n”,*p1,*p2); p2=p1; printf(“%d,%d\n”,*p1,*p2);}运行情况:假设键盘输入为:10,20