C++中的指针入门及剖析(二)

2014-11-24 12:10:56 · 作者: · 浏览: 2
er_2就是变量a和b,最后两个cout语句的作用是相同的。

3、 pointer_1=&a和pointer_2=&b是将a和b的地址分别赋给pointer_1和pointer_2。注意不应写成:*pointer_1=&a;和*pointer_2=&b;因为a的地址是赋给指针变量pointer_1而不是赋给*pointer_1(变量a)。

关于对”*”和”&”运算符的说明:

如果已执行了”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了。

&a是什么意思?先进行&a的运算,得a的地址,再进行*运算,即&a所指向的变量,*&a和*pointer_1的作用是一样的,它们等价于变量a。即*&a与a等价。

实例:大小排序问题

输入a,b两个整数,按先大后小的顺序输出a和b(用指针变量处理)

解题思路:设两个指针变量p1和p2,使它们分别指向a和b,使p1指向a和b中的大者,p2指向小者,顺序输出*p1,*p2就实现了先大后小的顺序输出a和b。按此思路编写程序如下:

/*

*pointer_2.cpp

*

* Created on: 2012-4-4

* Author: David

*/

#include

usingnamespace std;

int main()

{

int *p1,*p2,*p,a,b;

cin>>a>>b;

p1=&a;

p2=&b;

if(a

{

p=p1;

p1=p2;

p2=p;

}

cout<<"a="<

cout<<"max="<<*p1<<"min="<<*p2<

return 0;

}


摘自 安诺的专栏