首页 理论教育 C语言指针变量引用-C语言程序设计教程

C语言指针变量引用-C语言程序设计教程

时间:2023-10-23 理论教育 版权反馈
【摘要】:未经赋值的指针变量不能使用,否则将造成系统混乱。对指针变量赋值只能赋予一个内存地址,决不能赋予其他数据,否则将引起错误。若出现在变量声明中,则为类型说明符,表示其后的变量p是指针类型;若出现在执行语句中,则为指针运算符,表示指针变量所指的变量。在使用指针变量时,需要注意以下几点。变量a的数据类型int与指针变量的基类型int一致。可以将一个指针变量赋值给指向相同类型变量的另一个指针变量。

C语言指针变量引用-C语言程序设计教程

指针变量和普通变量一样,在使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱。对指针变量赋值只能赋予一个内存地址,决不能赋予其他数据,否则将引起错误。在C语言中,变量的地址是由编译系统分配的,对用户完全透明,用户可通过相应的运算符来获得变量的地址。

关于指针类型的数据,有两个相关的运算符。

1.取地址运算符“&”

取地址运算符“&”,是一个单目运算符,其结合性为自右向左,其功能是取得变量的地址。在前面介绍的scanf()函数中,我们已经了解并使用到了&运算符。其一般形式如下:

&变量名

例如:“&a”表示变量a的地址。变量本身必须预先说明。

假定有如下定义语句。

把变量a的地址赋值给指针变量p,此时指针变量p指向整型变量a,假设变量a的地址为2000,这个赋值可形象地理解为图8-1所示的联系。

2.指针运算符“*”

指针运算符“*”,是一个单目运算符,通常称为间接访问运算符或引用运算符,其结合性为自右向左,用来表示该指针所指的变量。在指针运算符之后的操作对象必须是指针类型的数据,比如,指针变量名。例如,有如下的定义及语句。

运算符“*”访问以p为地址的存储单元,而p中存放的是变量a的地址,因此,*p访问的是地址为以2000开始的存储单元,也就是变量a所占用的存储单元。上面的赋值语句x=*p等价于x=a。

实际上,取地址运算符“&”与指针运算符“*”是一对逆运算符。

设有指向整型变量的指针变量p,如果要把整型变量a的地址赋值给指针变量p,可以有以下两种方式。

1)指针变量初始化的方法

2)赋值语句的方法

注意:上述示例中“*”出现在不同的位置,其含义不同。若出现在变量声明中,则为类型说明符,表示其后的变量p是指针类型;若出现在执行语句中,则为指针运算符,表示指针变量所指的变量。(www.xing528.com)

在使用指针变量时,需要注意以下几点。

(1)只能将一个变量的地址赋值给与其数据类型相同的指针变量。也就是说,要使一个指针变量保存某个变量的地址,则应保证变量的数据类型与指针变量的基类型一致。例如:

把整型变量a的地址赋值给整型指针变量p。变量a的数据类型int与指针变量的基类型int一致。下面的写法是错误的。

(2)可以将一个指针变量赋值给指向相同类型变量的另一个指针变量。例如:

由于pa、pb均为指向整型变量的指针变量,因此可以相互赋值。

(3)只能将指针变量赋值为变量的地址,而不能赋值为表达式的地址。下面的写法是错误的。

(4)不允许把一个整数赋值给指针变量,两者数据类型不同。下面的赋值是错误的。

【例8-1】通过指针变量访问变量(间接访问变量)。

例8-1 运行视频

程序运行结果如图8-2所示。

图8-2 例8-1的运行结果

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

我要反馈