当前位置:文档之家› 指针变量的定义和引用指针变量的定义和引用指针变量的...

指针变量的定义和引用指针变量的定义和引用指针变量的...


(2) 定义指针变量时,不仅要定义指针变量名,还必须指出指针变量所指向的变量 的类型即基类型,或者说,一个指针变量只能指向同一数据类型的变量。由于不同类型的数 据在内存中所占的字节数不同,如果同一指针变量一会儿指向整型变量,一会儿指向实型变 量,就会使该系统无法管理变量的字节数,从而引发错误。
2. 指针变量的初始化 在指针变量定义好了之后,如何来使用指针,它与普通变量有什么不同,这是我们下面
者说这个指针指向整型变量 a,也可以说是指针变量 p 指向整型变量 a 。
系统对变量访问形式分为以下两种:
(1)直接访问
按变量地址存取的变量值的方式称为“直接访问”方式。
说明:用变量名对变量的访问也属于直接访问,因为在编译后,变量名和变量地址之间
有对应关系,对变量名的访问系统自动转换成利用地址对变量的访问。如图 7.4a (2)间接访问 将变量的地址存放在一种特殊变量中,利用这个特殊变量进行访问。如图 7.4b 所示,
在定义指针变量时同时给指针一个初始值,称为指针变量初始化。 例如:
int a=20,b=5;
/* 定义两个整型变量 a,b 并初始化 */
int *pa=&a;
/* 将变量 a 的地址赋给指针变量 pa */
float x,*px=&x;
/* 定义单精度实型变量 x,并将变量 x 的地址赋给指针变量 px */
float *q;
/* 定义了一个指向单精度实型变量的指针变量 q */
double *d;
/* 定义了一个指向双精度实型变量的指针变量 d */
char *c; 几点说明:
/* 定义了一个指向字符型变量的指针变量 c */
(1) C 语言规定所有变量必须先定义后使用,指针变量也不例外,为了表示指针变 量是存放地址的特殊变量,定义变量时在变量名前加指向符号“*”。
下面看一个完整的例子:
【例 7.1】用两种不同的方法输出变量的值。 /*源程序名:CHlt;stdio.h>
/*02*/ main()
/*03*/ {
/*04*/
int a=18,*p=&a; /* 定义整型变量 a,同时定义指针变量 p,并对 p 初始化*/
图 7.2 变量在内存中的表示
7.1.2 指针和指针变量
在前面我们说过,指针就是地址。而指针
变量就是存放地址的变量。就像我们学过的整
型、实型等数据类型一样,指针也是一种数据
类型,回想我们以前学过的数据类型,整型变
量的值是整数,实型变量的值是实数,那么指
针变量的值就是指针,也就是地址。
程序要访问内存里的某一个变量,首先要
7.2.2 指针变量的引用
指针变量一旦定义好了,我们就可以引用它。对指针变量的引用包含两个方面:一是对 指针变量本身的引用,如对指针变量进行的各种运算;二是利用指针变量来访问所指向的目
标,对指针的间接引用。
1. 指针运算符、地址运算符与下标运算符 与指针相关的三个运算符:&、*、[ ] 均以内存地址作为操作数。 (1)&:取地址运算符,在前面已经讨论过,在此不再赘述。
/*05*/ printf("a=%d\n",a); /* 输出整型变量 a 的值 */
/*06*/
printf("*p=%d\n",*p); /* 输出指针变量 p 指向的目标的值 */
/*07*/ } 程序运行结果:
a=18 *p=18 上例中,两个输出语句输出的结果相同,说明指针变量 p 所指向的目标就是整型变量 a。
7.1 指针的概念
指针就是地址,指针变量是一个特殊的变量,它里面存储的数值被解释成为内存里的一 个地址。指针变量就是存放地址的变量, 要搞清一个指针需要从四个方面的内容来理解: 指针的类型,指针所指向的类型,指针的值或者叫 指针所指向的内存区,还有指针本身所占据的内存 区。
为了便于理解指针的概念,我们有必要讨论一 下计算机内存和数据的关系。我们知道,程序要装 入内存才能够运行,数据也只有装入内存才能被程 序处理,那么程序和数据在内存中的组织形式是怎 样的呢?内存又是什么样的呢?内存是计算机用于 存储数据的存储器,以一个字节作为存储单元,为 了便于访问,给每个字节单元一个唯一的编号,第 一字节单元编号为 0,以后各单元按顺序连续编号,
第一行先定义了整型变量 a,并为之分配两个存储单元;第二行再定义一个指向整型变
量的指针变量 pa,在内存中就为指针变量分配了一个存储空间,同时通过取地址(&)运
算符把变量 a 的地址赋给 pa,也就是放在程序为指针变量 pa 分配的存储空间中。这样,指
针变量 pa 就指向了确定的变量 a。同理,px 指向变量 x。
若有定义:
int a,﹡p=&a; 说明指针 p 指向整型变量 a,a 是 p 指向的目标,可以用*p 来引用 a,*p 与 a 是等价的, 因此,*p 可以像普通变量一样使用。 例如:
int a,﹡p=&a;
/* 定义整型变量 a,指针变量 p,并把 a 的地址赋给 p */
a=12;
/* 对变量 a 进行赋值 */
特殊变量 p 存放的内容是变量 x 的地址,利用变量 p 来访问变量 x 的方法称为“间接访问”。
图 7.4a 直接访问
图 7.4b 间接访问
在 C 语言中,如果变量 p 中的内容是另一个变量 x 的地址,则称变量 p 指向变量 x,或 称 p 是指向变量 x 的指针变量,形象地用图 7.4b 所示的箭头表示。
(2)*:指针运算符或称间接访问(引用)运算符。取指针所指向的目标的值。* 右边 的操作数必须是指针,且它已与确定目标建立了联系。
(3)[ ]:下标运算符。取指针所指向的目标的值。[ ] 左边的操作数必须是指针,且 它已与确定目标建立了联系。下标运算符一般在数组中用的比较多。
指针指向的对象可以表示成如下形式:
将要讨论的问题。先看如下的指针变量的定义:
int *pa,*pb;
float *pf; 上面两行说明语句仅仅定义了指针变量 pa,pb,pf,但这些指针变量指向的变量(或内存 单元)还不明确,因为这些指针变量还没被赋于确定的地址值,这时指针变量里的地址值是 随机的。只有将某一具体变量的地址赋给指针变量之后,指针变量才能指向确定的变量(内 存单元)。
*p=12;
/* 对*p 进行赋值,也就是对变量 a 进行赋值 */
printf("%d%d",*p,a); /* 以不同的形式输出变量 a 的值 */ 上述第二、三条语句都是对变量 a 赋值,而第四条语句是以不同的形式输出变量 a 的值。 再观察下面三语句:
指针是 C 语言的重要数据类型,也是 C 语言的精华所在。学好 C 语言中的指针能帮助 我们编写高效、正确和灵活的程序。指针、地址、数组及其相互关系也是 C 语言中最有特 色的部分。规范地使用指针, 可以使程序达到简单明了,灵活高效的效果。 因此, 在 C 程序设计中,我们不但要善于使用指针,而且还要学会在各种情况下灵活、正确地使用指针 变量。
由此可以得出结论:变量的指针即为变量的地址,而存放其它变量地址的变量是指针变 量。
7.2 指针变量的定义和引用
7.2.1 指针变量的定义和初始化
1. 指针变量的定义 我们知道变量在计算机内是占有一块存贮区域的,变量的值就存放在这块区域之中, 在
计算机内部, 通过访问或修改这块区域的内容来访问或修改相应的变 量。C 语言中,对于 变量的访问形式之一,就是先求出变量的地址,然后再通过地址对它进行访问,这就是这里 所要论述的指针及其指针变量。
*指针变量
特别要注意的是,此处*是访问指针所指向变量的运算符,与指针定义时的*不同。在定 义指针变量时,* 号表示其后是指针变量。在其它位置出现,* 号是运算符。如果与其联系 的操作数是指针类型,*是间接访问(引用)运算符;如果与其联系的操作数是基本类型,*是 乘法运算符。在使用和阅读程序时要严格区分* 号的含义。
第 14 讲 指针变量的定义和引用
【学习目标】
掌握各种类型指针的定义、初始化;掌握指针的使用方法;理解指针的概念。
【重 难 点】
重点: 变量的地址和指针概念的建立,指针变量的定义和引用 难点: 指针概念及指针变量的引用
【学时安排】
学时:2 学时
【知 识 点】
7.1 指针的概念........................................................................................................................1 7.1.1 变量的地址.............................................................................................................2 7.1.2 指针和指针变量.....................................................................................................2
7.2 指针变量的定义和引用.....................................................................................................3 7.2.1 指针变量的定义和初始化......................................................................................3 1. 指针变量的定义..........................................................................................................3 2. 指针变量的初始化......................................................................................................4 7.2.2 指针变量的引用......................................................................................................4
相关主题