引用和指针

来源:互联网 发布:银行家算法的例题详解 编辑:程序博客网 时间:2024/06/14 05:29

引用

1.引用即别名

int a = 20;int& b = a; // int* b = &a;b = 10; // *b = 10;cout << a << endl; // 10

2.引用必须初始化
int a;int* p;a = 20;p = &a;int& b; // ERROR !int& b = a; // OK
3.引用一旦初始化就不能再引用其它变量
int a = 20, c = 30;int& b = a;b = c; // c => b/a
4.引用的应用场景
1)引用型参数
a.修改实参
b.避免拷贝,通过加const可以防止在函数中意外地修改实参的值,同时还可以接受拥有常属性的实参。
2)引用型返回值
int b = 10;int a = func (b);func (b) = a;
从一个函数中返回引用往往是为了将该函数的返回值作为左值使用。但是,一定要保证函数所返回的引用的目标在该函数返回以后依然有定义,否则将导致不确定的后果。
不要返回局部变量的引用,可以返回全局、静态、成员变量的引用,也可以返回引用型形参变量本身。

引用和指针的区别

1)引用的本质就是指针,很多场合下引用和指针可以互换。
2)在C++层面上引用和指针存在以下不同:
a.指针式实体变量,但是引用不是实体变量。
int& a = b;sizeof (a); // 4double& d = f;sizeof (d); // 8
b.指针可以不初始化,但是引用必须初始化。
c.指针的目标可以修改,但是引用的目标的不能修改。
d.可以定义指针的指针,但是不能定义引用的指针。
int a;int* p = &a;int** pp = &p; // OK<pre name="code" class="cpp">int a, b, c;int* parr[] = {&a, &b, &c}; // OKint& rarr[] = {a, b, c}; // ERROR

int& r = a;int&* pr = &r; // ERROR
e.可以定义指针的引用,但是不能定义引用的引用。
int a;int* p = &a;int*& q = p; // OKint& r = a;int&& s = r; // ERROR

f.可以定义指针的数组,但是不能定义引用的数组。
int a, b, c;int* parr[] = {&a, &b, &c}; // OKint& rarr[] = {a, b, c}; // ERROR
可以定义数组的引用。
int arr[] = {1, 2, 3};int (&arr_ref)[3] = arr; // OK


0 0
原创粉丝点击