1.定义:
1.1 &-----取地址运算符
功能:返变量的内存地址
Eg:int *p,m; 定义p为指向int类型变量的指针,同时定义变量m
m = 200; 将数值200赋值给变量m
p = &m; 将变量m的地址赋给指针变量p
-------------------------------------
此时: p = 一个内存地址 *p = m
1.2 *-----间接访问运算符
功能:访问指针指向的变量
Eg:int *p,m = 200,n;
p = &m; p指向整型变量m
n = *p; 将p指向的变量m取出,赋值给变量n
*p = 100 将100赋值给变量p所指向的变量m
---------------------------------------------------------------
形如:指针变量 *p
*p 取出指针变量p所指向地址的值 (与变量m等价)
p 指针变量指向的地址 (与变量&m等价)
&p 指针变量p的地址
---------------------------------------------------------------
形如:变量 m
m 一个常量值或无值 (与指针变量*p等价)
&m m的地址 (与指针变量p等价)
*m 无意义,会编译失败 (同理:&(*m)也会编译失败)
Eg:*(&m) = m ; &(*m) 编译失败无意义
---------------------------------------------------------------
形如:引用变量 &r //用&符号来说明对变量的引用
r 被引用的变量的值
&r 被引用变量的地址
*r 无意义,编译失败
Eg:
int i,&r = i;
r +=10;
-------------
Result: i+=10;//对引用变量r的操作就是对原被引用变量的操作
---------------------------------------------------------------
需补充:
右值引用 Type&&
设X为任何一种数据类型,则定义X&&是到数据类型X的右值引用(rvalue reference to X)。传统的引用类型X&被称为左值引用(lvalue reference to X)。例如:
int i;
int &j=i; //传统的左值引用数据类型的变量并初始化
int &&k=std::move(i); //定义一个右值引用数据类型的变量并初始化。
std::move定义于<utility>