理论教育 C语言程序设计:变量指针

C语言程序设计:变量指针

时间:2023-10-20 理论教育 版权反馈
【摘要】:只要将需要指向的变量的地址赋给相应的指针变量即可,但要求二者的类型一致。指针变量的算术操作允许用于指针的算术操作只有加法和减法。

C语言程序设计:变量指针

1.指针变量的定义

存放地址的变量称为指针变量。指针变量是一种特殊的变量,它不同于一般的变量,一般变量存放的是数据本身,而指针变量存放的是数据的地址。C语言规定所有变量在使用前都必须定义,系统会按数据类型分配内存单元,所以指针变量必须定义为“指针类型”。

格式:基类型 *指针变量名

其中,“基类型”是该指针变量所指向的变量的类型,也就是指针变量所存储变量地址的那个变量的类型。例如,以下分别定义了基类型为整型、实型和字符型的指针变量p、point1、point2。

有了以上定义,则指针变量p只能存储int类型变量的地址,point 1只能存储float类型变量的地址,point2只能存储字符型变量的地址。

提示:

①地址就是指针,变量的指针就是变量的地址,而存放变量地址的变量是指针变量。

②定义变量时,指针变量前的“*”是一个标志,表示该变量的类型为指针型变量。

③指针变量存放某一类型变量的地址。而指针常量是指所引用的对象的地址不能改变的指针。

2.指针变量的初始化赋值

在C语言中,用指针来表示一个变量指向另一个变量这样的指向关系。那么如何使一个指针变量指向一个普通类型的变量呢?只要将需要指向的变量的地址赋给相应的指针变量即可,但要求二者的类型一致。例如,下面语句就实现了指针变量p指向变量I。

当然,指针变量也可将定义说明与初始化赋值合二为一,则上面情况也可用下面的方法实现。

int I=3; int*p=&I;

在定义一个指针变量后,编译器不会自动为其赋值,此时指针变量的值时不确定的。事实上,指针变量必须被赋值语句初始化才能使用,否则,直接使用会带来内存错误。指针可被初始化为0、NULL或某个地址,具有值为NULL的指针不指向任何值,NULL是在头文件<stdio.h>(以及其他几个头文件)中定义的符号常量。把一个指针初始化为0,等价于把它初始化为NULL。

空指针NULL是一个特殊的值,将空指针赋值给一个指针变量以后,说明该指针变量的值不再是不定值,而是一个有效值,只是不指向任何变量。指针变量只能接收地址,例如,下面的赋值方法是错误的。

3.指针变量的运算

前面曾谈到指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值,未经赋值的指针变量不能使用,否则将造成系统混乱,甚至死机。指针变量的赋值只能赋予地址,绝不能赋予任何其他数据,否则也将会引起错误。在C语言中,变量的地址是由编译系统分配的,所以用户是不知道变量的具体地址。

(1)指针运算符

①取地址运算符&。该运算符是单目运算符,其结合性为自右至左,其功能是取变量的地址。

②取内容运算符*。也叫间接引用运算符,其结合性为自右至左,用来表示指针变量所指的变量。在*运算符后跟的变量必须是指针变量。

取内容运算符“*”,与指针变量定义时出现的“*”意义完全不同,指针变量定义时,“*”仅表示其后的变量是指针类型的变量,是一个标志,而取内容运算符是一个运算符,其运算后的值是指针所指向的对象的值。

提示:(www.daowen.com)

&*p==p;*&data==data

【例7.1】验证运算符*和&的作用。

程序如下:

运行结果:

52,10

52,10

19ff3c,19ff38

19ff3c,19ff38

此外,指针变量与一般的变量一样,存放在它们之中的值是可以改变的,也就是说可以改变它们的指向,例如:

若此时有赋值表达式“p2=pl;”,则pl与p2就会指向同一对象i,此时,*p2就等价于i,而不是j。

(2)指针变量的算术操作

允许用于指针的算术操作只有加法和减法。如有定义:

int n,*p;

表达式p+n(n≥0)指向的是p所指的数据存储单元之后的第n个数据存储单元,而不是简单地在指针变量p的值上直接加个数值n,其中数据存储单元的大小与数据类型有关。

又如,若指针变量p1是整型的指针变量,其初始值为2000,整型的长度是两个字节,则表达式“p1++;”是将p1的值变成2002,而不是2001。每次增量之后,p1都会指向下一个单元。同理,当p1的值为2000时,表达式“p1--;”将p1的值变成1998。

(3)指针值的比较

使用关系运算符<、<=、>、>=、==和!=,可以比较指针值的大小。

如果p和q是指向相同的类型的指针变量,并且p和q指向同一段连续的存储空间(如p和q都指向同一个数组的元素),p的地址值小于q的值,则表达式p<q的结果为1,否则表达式p<q结果为0。参与比较的指针所指向的空间一定在一个连续的空间内,比如都指向同一数组。

【例7.2】输入a和b两个整数,按先大后小的顺序输出两个数。

程序如下:

运行结果:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈