有两个与指针变量有关的运算符:
(1)&:取地址运算符。
(2)*:指针运算符(或称间接访问运算符)。
例如:&a为变量a的地址,*p为指针变量p所指向的存储单元。
编写程序:
运行结果:
程序分析:
(1)在程序第5行虽然定义了两个指针变量pointer_1和pointer_2,但它们并未指向任何一个整型变量,而只是提供两个基类型为整型的指针变量。它们可以指向整型变量,至于指向哪一个整型变量,要在程序语句中指定。程序第7行和第8行的作用就是使pointer_1指向a, pointer_2指向b。此时 pointer_1的值为&a(即a的地址),pointer_2的值为&b。
(2)第10行的*pointer_1和*pointer_2就是变量a和b。最后两个cout语句的作用是相同的。
(3)第7、8行"pointer_1=&a;"和"pointer_2=&b;"是将a和b的地址分别赋给pointer_1和pointer_2。注意不应写成"*pointer_1=&a;"和" *pointer_2=&b;"。因为a的地址是赋给指针变量pointer_1,而不是赋给*pointer_1(即变量a)。
对"&"和"*"运算符的说明:
(1)如果已执行了"pointer_1=&a;"语句,请问&* pointer_1的含义是什么?"&"和"*"两个运算符的优先级别相同,但按自右而左方向结合,因此先进行*pointer_1的运算,它就是变量a,再执行&运算。因此,&*pointer_1与&a相同,即变量a的地址。
如果有
pointer_2=&*pointer_1;
它的作用是将&a(a的地址)赋给 pointer_2,如果pointer_2原来指向b,经过重新赋值后它已不再指向b了,而也指向了a。
(2)*&a 的含义是什么?先进行 &a 的运算,得a的地址,再进行*运算,即&a所指向的变量,*&a和*pointer_1的作用是一样的(假设已执行了"pointer_1 =&a;"),它们等价于变量a,即*&a与a等价。