int i = 42;
int &r = i; //& 紧随类型名出现,因此是声明的一部分,r 是一个引用
int *p ; //* 紧随类型名出现,因此是声明的一部分,p 是一个指针
p = &i; //& 出现在表达式中,是一个取地址符
*p = i; //* 出现在表达式中,是一个解引用符
int &r2 = *p; //& 是声明的一部分,* 是一个解引用符。
在声明语句中,& 和 * 用于组成复合类型;
在表达式中,它们的角色又转变成运算符。
在不同的场景下出现的虽然是同一个符号,但是由于含义截然不同,所以我们完全可以把它当作不同的符号看待。