指针与引用(二)

引用必须初始化,而指针不需要

  二、引用
1.引用即别名
int a = 10;
int& r = a; // r是a的一个别名
r = 20;
cout << a << endl; // 20

       const int a = 1;
        int &b = a; // error,a不能为const, 但引用b可以为const

2.引用必须初始化
int& r; // ERROR !
3.引用一旦初始化,就不能再引用其它变量
int a = 10;
int& r = a;
int b = 20;
r = b; //  a=b=r=20

4.引用型参数和返回值
void foo (int a) { a = 100; }
void bar (int* a) { *a = 100; }
void hum (int& a) { a = 100; }
void print (const int& a) { 
  cout << a;
  a = 100; // ERROR !
  ++a; // ERROR !

}
int b = 0;
foo (b); // b : 0
bar (&b); // b : 100
hum (b); // b : 100
print (b);
1)希望在函数中修改实参的值。
2)避免值传递所带来的开销。
3)为了防止在函数中意外地修改实参的值,可以使用const型的引用。

5.引用和指针
1)引用的本质就是指针,引用不是实体变量。
2)指针可以不初始化,但是引用必须初始化

3)指针的目标可以修改,但是引用的目标不可修改。

4)可以定义指向指针的指针,但是不能定义引用引用的引用。
int* p;
int** pp = &p;
int& r = a;
int&& rr = r; // ERROR !
5)可以定义引用指针的引用,但是不能定义指向引用的指针。
int* p;
int*& rp = p;
int a;
int& r = a;
int&* pr = &r; // ERROR !
6)可以定义指针数组,但是不能定义引用数组。可以定义数组引用。
int a, b, c;
int* parr[] = {&a, &b, &c};
int& rarr[] = {a, b, c}; // ERROR !
int arr[] = {1, 2, 3};
int (&arrr)[3] = arr;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值