21. 引用

C++复杂的原因:提供了太多的内存模型.

  1. 太多可以放对象的地方(堆、堆栈、全局数据区里面)
  2. 提供了太多访问对象的方式 (变量里面放对象,通过指针访问一个对象,通过引用去访问一个对象)

以上有九种组合.

char c;
char* p = &c;
char& r = c; //引用 初始化
//引用:一般的时候需要定义的时候给这个初始化. r是c的引用(别名). 初始值必须是一个变量或可以做左值的东西.
//需要用c的时候,可以用r. 用r就是在用c. 一个东西的两个名字.

type& refname = name;

int X = 47;
int& Y = X; //Y是X的别名.

cout << "Y = " << y << endl; //Y = 47
Y = 18;
cout << "X = " << x << endl; //X = 18

reference的规则

  1. 定义的时候必须要初始化
int x = 3; //引用定义的时候,必须初始化. 
int& y = x; //引用y x绑在一起
const int& z = x; //z是x的别名, 可以该x值, 但不能改变z. 因为const

///
void f(int& x);
f(y);
int* f(int* x)
{
  (*x)++;
  return x; //safe, x is outside this scope.
}

int& g(int& x) //引用
{
  x++;
  return x;//safe, outside this scope
}

int x;

int& h()
{
  int q;
  //return q; //wrong
  return x; //ok
}

int main()
{
  int a = 0;
  f(&a); //a=1
  g(a); //x = 2
  h() = 16; h()返回结果是引用,既然是引用就可以做左值.
  return 0;
}

Pointer vs Reference

Reference: 不能是NULL,必须有初始值
Point:可以是NULL

Reference: 必须依赖于存在的变量, 是别名
Point:独立的

Reference: 通过const指针实现(为了代码少一些*)
Point:

int&* p; //wrong
void f(int* &p); //ok
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值