21. 引用

来源:互联网 发布:淘宝店铺装修模块代码 编辑:程序博客网 时间:2024/06/10 21:58

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 = 47Y = 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; //wrongvoid f(int* &p); //ok
原创粉丝点击