【C++】引用和指针

引用

概念:引用不是定义一个新的变量。而是给一个已经定义的变量起一个别名。因为引用不需要额外开辟空间。

用法:类型 &引用变量名=已定义过的变量名

void TestReference2 ()
{
    int d1 = 4;
    const int & d2 = d1;
    d1 = 5; // d1改变 d2的值也会改变。
    //d2 = 6; // 不能给常量(不能被修改的量)赋值
    const int d3 = 1;
    const int & d4 = d3;
    //int&d5 = d3;
    const int & d6 = 5; // 常量具有常性,只有常引用可以引用常量
    double d7 = 1.1;
    //int& d8 = d7; //d7是double类型,d8是int,d7赋值给 d8时要生成一个临时变量
    // 也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。
    const int& d9 = d7;
}

引用的特点:

  1. 一个变量可取多个别名
  2. 引用必须初始化
  3. 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。

引用做参数

1.如果形参为引用类型,则形参是实参的别名。

void Swap (int& left, int& right)
{
	int temp = left;
	right = left ;
	left = temp ;
}

2.当不希望函数内改变参数的值,尽量使用常引用传参。

引用做返回值

1. 不要返回一个临时变量的引用。因为临时变量在函数返回后被释放,给这个临时变量起别名没有任何意义,而引用的底层原理为指针,很容易产生野指针。

2. 如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。

汇编层看引用的特性


引用和指针的区别

  1. 引用只能在定义时初始化一次,之后不能改变指向其他变量;指针变量的值可变。
  2. 引用必须只想有效的变量,指针可以为空。
  3. sizeof指针对象和引用对象的意义不一样,sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
  4. 指针和引用的自增(++)自减(--)意义不一样。指针++加的是数据的类型大小。
  5. 引用比指针更安全。
注意:指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所指的释放以后最好置0,否则可能存在野指针问题。

猜你喜欢

转载自blog.csdn.net/moralin_/article/details/80867805