int a = 1;
int *p1 = &a;//int *p1表示创建了一个指针变量p1,*表示p1是一个指针变量,
//int表示该指针变量指向的对象的类型;&表示取a的内存地址。
//将a的内存地址赋给指针变量p1的指向对象地址空间,
//或者说,让指针变量p1指向a。
int b = *p1;//右侧代表的是直接取出指向的对象,赋值给b,b=a
#include<iostream>
using namespace std;
void main(){
int a=1;
int *b;
b=&a;//a的引用赋值给b
cout<<(*b)<<endl;//解引用b,输出1
int i=5;
int &j=i;
i=7;
//j是一个引用类型, 代表i的一个替代名
//i值改变时,j值也跟着改变,所以会输出i=7 j=7
cout<<"i="<<i<<"j="<<j;
//解引用操作符是:*。对于其定义书上并没有给出明确的定义,
//不过其意思是对其得到操作数(必须为指针类型)所指变量的引用。
//如有如下代码:
int ival;
int *ip=&ival;
int &iref=*ip;//*ip就是ival的引用。
//其等价于
int &iref=ival;
//的确,解引用是很好的说法。
//一般说*是“取值”符号,对应的&是取地址符号,
//但是,如果对一个结构的指针用*号,那还叫成取值就说不通了。
struct foo a;
struct foo * p = &a:是定义p为a的指针
struct foo & b = a;就是声明b为a的引用
//用p时要用->符号,或(*p).xxx来取成员
//用b的话,就直接b.xxx来取成员
}