IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++翁恺学习18-引用 -> 正文阅读

[C++知识库]C++翁恺学习18-引用

C++ 复杂在于:

  • 太多的能够放对象的地方:对象可以放在 堆栈、堆、全局数据区
  • 太多可以访问对象的方式:直接掌握对象(变量内放对象)、通过指针访问对象、引用去访问对象

3*3 共 9种组合。

Declaring references

  • references are a new data type in C++

    char c;            //a character
    char* p = &c;      //a pointer to a character
    char& r = c;       //a reference to a character,需要初始化
    

    r 是 c 的别名。

  • local or global variables 本地变量和全局变量

    • type& refname = name;
    • for ordinary varibles,the initial value is required
  • in parameter lists and member variables 参数表内或者作为成员变量可以没有初始化

    • type& refname
    • binding defined by caller or constructor

参数是调用函数时候给的。成员变量是构造对象的时候初始化。

references

  • declares a new name for an existing object

    int X = 47;
    int& Y = X;//Y is a reference to X,Y 是 X 的别名。
    
    //X and Y now refer to the same variable
    
    cout<<Y;//print 47
    Y = 18;
    cout<<x;//print 18

Rules of references 引用规则

  • references must be initialized when defined

  • initialization establishes a binding

    • in declaration

      int x = 3;
      int& y = x;
      const int&z = x;//类似于指针,通过 z 不能修改x, z是x的别名
    • as a function argument

      void f(int& x);
      f(y);	//initialized when function is called
  • bindings don't change at run time, unlike pointers

  • assignment changes the object referred-to

    int& y = x;
    y = 12;//changes value of x
  • the target of a reference must have a location!

    void func(int &);
    func(i*3);		//warning or error,i*3 有结果但是没有名字,不可以

一个函数的返回结果是引用,那么该函数可以做左值。 x 为 16。

一定要去看 g(x)的原型是什么,可能把a 给改了。

int g(int x){}

g(a)不知道调用哪个函数。不能重载。

pointers vs. references

  • references
    • can't be null
    • are dependent on an existing variable, they are an alias(别名) for an variable
    • can't change to a new "address" location
  • pointers
    • can be set to null
    • pointer is independent of existing objects
    • can be change to point to a different address

引用是const指针实现的,为了让代码简洁。

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

int& g(int& x){
    x++;	//same effect as in f()
    return x;	//safe,outside this scope
}

C++有三种方式放对象,有三种方式访问对象;Java只有一个地方可以放对象,所有对象都放在堆里面只有一种方式访问对象,就是通过“指针”因为它只能通过指针访问对象,因此他可以把那个“*”去掉,然后规定说这不叫指针这叫引用,这其实和C++的引用是不一样的,更像是C++的指针,因为引用是不能做引用之间的赋值的实际上是指针,区别在于外形上没有那个星号,不能做运算(C的指针可以做计算)

references实际上是一种指针,一种const的指针

restrictions

  • no references to references

  • no pointers to references

    int& * p;	//illegal, *p是引用。引用的地址是无法取到的
    • reference to pointer is ok

      void f(int* &p); // p是引用, 引用的对象是个指针

离变量最近的决定了p的基本类型。

  • no arrays of references

引用不是实体,所以没有引用的数组。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-16 22:04:24  更:2022-03-16 22:06:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:23:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码