《C++ Primer》读书笔记-第二章 04 指针和引用
2016-11-14 09:31
274 查看
作者:马志峰
链接:https://zhuanlan.zhihu.com/p/23361546
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
本文仅作学习交流使用,禁止任何形式的转载
C++中有多种复合类型,我们先学习指针和引用
上一节讲到,变量定义的基本形式是:
类型说明符
一个或多个变量名组成的列表(以逗号分隔)
分号结束
其实还有一种更通用的说法:
类型说明符
一个或多个声明符组成的列表(以逗号分隔)
分号结束
对于基本类型来说,声明符指的就是变量名
对于复合类型来说,声明符指的是特殊符号+变量名
比如,可以这样定义一个引用类型的变量:
可以这样定义一个指针类型的变量:
引用只是别名,定义引用时,程序把引用和它的初始值绑定在一起
引用本身不是对象,编译器不会为引用分配内存空间,它只是一个别名
牢记以上两点就很容易理解引用了:
引用必须初始化(定义时要执行绑定的过程)
对引用进行操作,实际是在操作引用绑定的对象(引用只是别名)
指针和引用的最大区别就是,指针本身是一个对象
指针和普通变量的最大区别是,指针存放的是其他对象的地址
前面我们用&操作符进行引用的定义,它同时也是取地址符
&操作符取出变量ival的地址赋值给指针p
同样的,*操作符也具备两重身份,它同时也是解引用符
对指针解引用得到的是指针所指的对象
对指针p解引用得到它所指的对象ival,然后ival的值用于初始化新定义的整型变量i2。
上面两句都是合法的,但是第二句容易迷惑新手,比如
我们会误以为p1、p2也是指针,其实只有p是指针。在理解时严格按照变量定义的基本形式就很简单
变量定义的基本形式:
类型说明符
一个或多个声明符组成的列表(以逗号分隔)
分号结束
int是类型说明符,*p、p1、p2组成声明符列表。因此只有p是指针
推荐使用 int *p的形式
还可以在一条语句中同时定义指针和引用
以及
遇到这种复杂的情况时,我们可以使用从右向左阅读的方法
离变量名最近的符号对变量的类型有直接的影响,ppi是一个指针,r是一个引用
声明符的其余部分用来确定关联对象的类型,ppi指向的是一个指针,r引用的也是一个指针
那么
也可以按照这样的方法来理解
链接:https://zhuanlan.zhihu.com/p/23361546
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
声明:
文中内容收集整理自《C++ Primer 中文版 (第5版)》,版权归原书所有。原书有更加详细、精彩的释义,请大家购买正版书籍进行学习。
本文仅作学习交流使用,禁止任何形式的转载
复合类型
复合类型是指基于其他类型定义的类型C++中有多种复合类型,我们先学习指针和引用
上一节讲到,变量定义的基本形式是:
类型说明符
一个或多个变量名组成的列表(以逗号分隔)
分号结束
其实还有一种更通用的说法:
类型说明符
一个或多个声明符组成的列表(以逗号分隔)
分号结束
对于基本类型来说,声明符指的就是变量名
对于复合类型来说,声明符指的是特殊符号+变量名
比如,可以这样定义一个引用类型的变量:
int ival = 1024; int &refVal = ival;
可以这样定义一个指针类型的变量:
int ival = 1024; int *p = &ival;
引用
区别于普通类型的变量,引用有以下几个特点:引用只是别名,定义引用时,程序把引用和它的初始值绑定在一起
引用本身不是对象,编译器不会为引用分配内存空间,它只是一个别名
牢记以上两点就很容易理解引用了:
引用必须初始化(定义时要执行绑定的过程)
对引用进行操作,实际是在操作引用绑定的对象(引用只是别名)
指针
和引用一样,指针也能实现对其他对象的间接访问。指针和引用的最大区别就是,指针本身是一个对象
指针和普通变量的最大区别是,指针存放的是其他对象的地址
前面我们用&操作符进行引用的定义,它同时也是取地址符
int ival = 1024; int *p = &ival;
&操作符取出变量ival的地址赋值给指针p
同样的,*操作符也具备两重身份,它同时也是解引用符
int i2 = *p;
对指针解引用得到的是指针所指的对象
对指针p解引用得到它所指的对象ival,然后ival的值用于初始化新定义的整型变量i2。
复合类型的声明
在理解复合类型变量的定义时,断句很重要int *p; int* p;
上面两句都是合法的,但是第二句容易迷惑新手,比如
int* p, p1, p2;
我们会误以为p1、p2也是指针,其实只有p是指针。在理解时严格按照变量定义的基本形式就很简单
变量定义的基本形式:
类型说明符
一个或多个声明符组成的列表(以逗号分隔)
分号结束
int是类型说明符,*p、p1、p2组成声明符列表。因此只有p是指针
推荐使用 int *p的形式
还可以在一条语句中同时定义指针和引用
int ival = 1024, &refVal = ival, *p = &ival;
更复杂的情况
int ival = 1024; int *pi = &ival; int **ppi = π
以及
int i = 42; int *p; int *&r = p;
遇到这种复杂的情况时,我们可以使用从右向左阅读的方法
离变量名最近的符号对变量的类型有直接的影响,ppi是一个指针,r是一个引用
声明符的其余部分用来确定关联对象的类型,ppi指向的是一个指针,r引用的也是一个指针
那么
int ***pi2; int **&r2 = ppi;
也可以按照这样的方法来理解
相关文章推荐
- C++ Primer 第二章 引用 指针 const限定符
- C++ Primer 读书笔记 Chapter 4 数组和指针
- 【高质量C++编程】读书笔记:引用与指针
- 《C++ Primer》读书笔记-第二章 03 变量
- 《C++ Primer》读书笔记-第六章 04 函数重载
- 《C++ Primer》读书笔记第六章-3-特殊特性 And 函数匹配 And 函数指针
- 04_c++重载_指针_引用
- c++ primer学习-引用类型和指针
- C++ primer 管理指针成员 读书笔记
- 《C++ Primer》读书笔记-第二章 05 const限定符
- 《C++ Primer》读书笔记第二章-1-基本内置类型 And 变量
- 《C++ Primer》读书笔记之“指针和const限定符”
- 读书笔记:C++ Primer系列(10)—— 数组与指针(2)
- 《c++ primer》读书笔记--数组与指针
- C++ Primer 读书笔记 数组和指针
- C++ primer 读书笔记系列——(3)C++中的数组和指针
- 《C++ Primer》读书笔记-第二章 06 处理类型
- 读书笔记:C++ Primer系列(9)—— 数组与指针(1)
- 《Visual C++ 程序设计》读书笔记 ----第8章 指针和引用
- 《C++ Primer》读书笔记-第二章 07 自定义数据结构