C++指针和引用
2016-03-18 11:00
176 查看
1.指针存储所指对象的地址
以上语句,输出i的结果为3。因为,*p是对指针的解引用,即并未改变p值本身,而是改变了*p——即所指向
对象的值
2.指针本身是对象的一种,因此指针可以是常量。当指针为常量时,其所指向地址是唯一的。可以将指针常
量复制给一般的指针对象
3.定义常量指针有两种方式
(1).为本身是常量的对象定义指针
此处p的定义处必须在指针符号*前加const,以下语句是错误的:
这是因为,常量对象i不能被更改,而p的定义被解释为一般对象的指针。由于通过对指针解引用,使用*p,
可以修改其所指对象的指。因此这在编译器看来是矛盾的,即常量i不可修改,*p可修改,矛盾。
(2).为本身不是常量的对象定义指针
这里,虽然没有直接将i定义为const变量,但在第2行符号*前定义了const并绑定了i。那么此时,编译器认为
程序将i定义为了常量。因此const type *被解释为“对象是常量的指针”。这样做的好处是防止数据在传递过程中被更改。
4.引用不是对象,它仅仅是所引用对象的别名
引用可以理解为另一种形式的指针,而它们的区别在于:由于引用本身不是对象,因此引用本身不能存储任
何对象的地址。对引用的修改,就是对其引用对象本身的修改。
此时,i的输出为3
5.由于引用不是对象,因此引用本身不能被赋予常量的意义,在符号&前使用const则和常量指针一样,是将
所指对象定义为常量
6.指针的引用
7.顶层const和底层const
(1).顶层const是指对象本身是const,如:
(2).底层const是指对象所指对象是const,如:
因此,底层const的概念只存在于指针和引用类型中。而由于引用本身不是对象,因此引用只能是底层const。而指针,既可以是顶层const,又可以是底层const。如:
int i=5; int *p=&i; *p=3;
以上语句,输出i的结果为3。因为,*p是对指针的解引用,即并未改变p值本身,而是改变了*p——即所指向
对象的值
2.指针本身是对象的一种,因此指针可以是常量。当指针为常量时,其所指向地址是唯一的。可以将指针常
量复制给一般的指针对象
int i=5; int * const p=&i; int *p1=p;
3.定义常量指针有两种方式
(1).为本身是常量的对象定义指针
const int i=5; const int *p=&i;
此处p的定义处必须在指针符号*前加const,以下语句是错误的:
const int i=5; int *p=&i;
这是因为,常量对象i不能被更改,而p的定义被解释为一般对象的指针。由于通过对指针解引用,使用*p,
可以修改其所指对象的指。因此这在编译器看来是矛盾的,即常量i不可修改,*p可修改,矛盾。
(2).为本身不是常量的对象定义指针
int i=5; const int *p=&i;
这里,虽然没有直接将i定义为const变量,但在第2行符号*前定义了const并绑定了i。那么此时,编译器认为
程序将i定义为了常量。因此const type *被解释为“对象是常量的指针”。这样做的好处是防止数据在传递过程中被更改。
4.引用不是对象,它仅仅是所引用对象的别名
引用可以理解为另一种形式的指针,而它们的区别在于:由于引用本身不是对象,因此引用本身不能存储任
何对象的地址。对引用的修改,就是对其引用对象本身的修改。
int i=5; int &r=i; r=3;
此时,i的输出为3
5.由于引用不是对象,因此引用本身不能被赋予常量的意义,在符号&前使用const则和常量指针一样,是将
所指对象定义为常量
int i=5; const &r=i;
6.指针的引用
int i=5; int *p; int *&r=p;//此处r即是引用,又是和p相关联的指针。r指向的是p本身的值,即某个地址。因此,这条语句可以解释为,r是指针p的引用。对r的修改,就是对p指向地址的修改。 r=&i;//r修改为i的地址&i,此时p指向了i *r=0;//对r解引用,等价于对p解引用,此时i=0
7.顶层const和底层const
(1).顶层const是指对象本身是const,如:
cont type i; type * const p;
(2).底层const是指对象所指对象是const,如:
const type *p; const type &r;
因此,底层const的概念只存在于指针和引用类型中。而由于引用本身不是对象,因此引用只能是底层const。而指针,既可以是顶层const,又可以是底层const。如:
const type * const p;
相关文章推荐
- C语言指针导学(4)——分清函数指针和指针函数
- C++用new来创建对象和非new来创建对象的区别
- 构造、解析函数
- C/C++—— 写一个函数,它的参数为指向函数的指针,返回类型也为指向函数的指针
- c++代码实现图的DFS遍历
- 关于C面向对象编程(一) 与C++内在联系
- VC自动化向导的bug2(vs2005使用Labview控件类时的错误)
- [c++][语言语法]函数模板和模板函数 及参数类型的运行时判断
- C++构造函数和拷贝构造函数等的使用
- C#调用C++写的Dll时的运行时错误解决
- C与C++程序的启动代码(startup)
- c++代码实现图的BFS遍历
- 解决绿C(C与C++程序设计学习与实验系统 2015)软件程序中文出现乱码问题
- c++中string 的replace用法
- 浅谈C++中指针和引用的区别
- 如何往char数组里输入带空格的字符串
- c++ 模板
- C++代码重用——包含
- C++ RTTI及“反射”技术
- 基于GDI的简单界面框架