指针变量和普通变量一样,在使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,否则将造成系统混乱。对指针变量赋值只能赋予一个内存地址,决不能赋予其他数据,否则将引起错误。在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的运行结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。