21. 引用
来源:互联网 发布:淘宝店铺装修模块代码 编辑:程序博客网 时间:2024/06/10 21:58
C++复杂的原因:提供了太多的内存模型.
- 太多可以放对象的地方(堆、堆栈、全局数据区里面)
- 提供了太多访问对象的方式 (变量里面放对象,通过指针访问一个对象,通过引用去访问一个对象)
以上有九种组合.
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的规则
- 定义的时候必须要初始化
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
阅读全文
0 0
- 21. 引用
- 引用
- 引用:...
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 引用
- 1484: 青蛙(四)
- 语言实践2-驱动学习(3)ioctl初步学习
- 二叉树的先序中序后序遍历(非递归)
- Quartus下软硬核固化到EPCS中(JTAG)延续上篇
- 几个递归示例
- 21. 引用
- View的事件体系-基础知识
- LeetCode 101. Symmetric Tree
- Spring的事务管理
- 用unity运行不了发生的错误
- HTML5 WEBGL学习2 实时3D渲染
- 单层感知器的python实现
- Forming a Magic Square
- 图像处理: 五种 插值法