[C++]指针与引用(定义辨析)

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>

原文地址:https://www.cnblogs.com/johnnyzen/p/7155256.html