指向对象的指针变量
2016-04-07 11:00
204 查看
指向对象的常指针
将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初值,不能改变,即其指向始终不变。Time t1(10,12,15), t2;
Time * const ptrl = &t1;
ptrl = &t2; //错误,ptrl不能改变指向
定义指向对象的常指针的一般形式为
类名 * const 指针变量名 = 对象地址;
注意在定义指针变量时使之初始化,如将第二行修改为:
Time * const ptrl;
ptrl = &t1; //使之指向t1,产生编译错误,常指针不能被赋值请注意:指向对象的常指针变量不能改变,即始终指向同一个对象,但可以改变其所指向对象(t1)的中数据成员的值。
指向常对象的指针变量
定义一个指向常变量的指针变量ptr;const char *ptr;定义指向常变量的指针变量的一般形式为
const 类型名 *指针变量名;
说明:
(1)如果一个变量被声明为常变量,只能用指向常变量的指针变量指向它,而不能用一般的指针变量去指向它。
如:
const char c[] = "boy"; const char *p1; p1 = c; char *p2 = c;//不合法,p2不是指向常变量的指针变量(2)指向常变量的指针变量除了可以指向常变量外,还可以指向未被声明为const的变量,此时不能通过此指针变量改变该变量的值。如:
char c1 = 'a'; const char *p; p = &c1; *p = 'b'; //非法,不能通过p改变变量c1的值 c1 = 'b';(3)如果函数的形参是指向非const型变量的指针,实参只能用指向非const变量的指针,而不能用指向const变量的指针,这样,在执行函数的过程中可以改变形参指针变量所指向的变量(也就是实参指针所指向的变量)的值。如:
const char str[] = "boy"; void fun(char *ptr); fun(str); //调用fun函数,实参是const变量的地址,非法
以上介绍的指向常变量的指针变量,指向常对象的指针变量的概念和使用是与此类似的,只要将“变量“换成”对象“即可。
(1)如果一个对象已被声明为常对象,只能用指向常对象的指针变量指向它,而不能用一般的(指向非const型对象的)指针变量去指向它。
(2)如果定义了一个指向常对象的指针变量,并使它指向一个非const的对象,则其指向的对象是不能通过指针来改变的。如:
Time t1(10, 12, 15); const Time *p = &t1; t1.hour = 18; (*p).hour = 18; //非法,不能通过指针变量改变t1的值请注意指向常对象的指针变量和指向对象的常指针变量在形式和作用上的区别。
Time * const p; //指向对象的常指针变量 const Time *p; //指向常对象的指针变量(3)指向常对象的指针变量最长用于函数的形参,目的在保护形参指针所指向的对象,使它在函数执行的过程中不能修改。如:
int main() { void fun(const Time *p); Time t1(10, 13, 56); fun(&t1); return 0; } void fun(const Time *p) { p->hour = 18; //错误 cout<<p->hour<<endl; }
相关文章推荐
- Python re模块
- 大型网站架构系列:分布式消息队列
- LeetCode Valid Parentheses
- 魅族干货!如何从视觉设计师的角度做竞品分析?
- http协议简述
- Shiro学习(9)JSP标签
- Mac 下AppRTCDemo xcode 工程搭建和webrtc源码下载
- Caffe深度学习框架上手教程
- POJ3278-Catch That Cow
- 献给和我合作的过得前端童靴们:jquery源码分析--核心函数(创建jquery空对象)
- 上传图片配置文件长度和宽度大小的说明
- Test Bench基础知识笔记
- 【1-1】Python的编码注释# -*- coding:utf-8 -*-
- Cadence中Quickview中没有预览
- NGUI实现滑动翻页效果实例代码
- C++第3次实验—个人所得税计算器
- 总结一下,我面试了好多家公司遇到的面试题,希望对大家有所帮助
- 4.3.4 master_wakeup.c:可唤醒模块(qmgr、pickup)唤醒(定时)事件初始化
- 背包问题更深化的理解-多重背包的二进制拆分
- .htaccess是什么?.htaccess几个简单应用