C++:带有const修饰的指针解读
来源:互联网 发布:u盘照片导入mac 编辑:程序博客网 时间:2024/05/18 15:28
总结:
const int *p:p可以指向别处,但不能通过 *p来操作p所指的数.(可以记为:const修饰 *p)
int const *p:和上面等效。
int * const p : p不能指向别处,但p所指的数可以用*p来操作.(记忆:const修饰p)
const int * const p :p不能指向别处,且p所指的数不能用*p来操作.(前一个const修饰 *p,后一个const修饰p)
注意:
上面的四个例子中,const的限制都仅对p有效,例如:
const int * const p = &i; //取i的地址赋给pi=2; //编译正确.const限制仅对p指针操作有效,直接对i进行操作不受限制
通过实例来看看const所修饰的指针使用方法:
1、
先看一个普通的指针使用。
形式:int *pTmp
含义:一个普通的指向int类型的指针
int main(int argc, char *argv[]) { int i = 1; int *pTmp = &i; printf("pTmp = %d\n", *pTmp); i = 2; printf("pTmp = %d\n", *pTmp); (*pTmp)++; printf("pTmp = %d\n", *pTmp); system("PAUSE"); return 0; }
输出:
pTmp = 1
pTmp = 2
pTmp = 3
请按任意键继续…
没有任何问题,pTmp指针你可以任意操作。
2、
形式:const int *pTmp
含义:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变。
int main(int argc, char *argv[]) { int i = 1; int j = 100; const int *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/ printf("pTmp = %d\n", *pTmp); i = 2; printf("pTmp = %d\n", *pTmp); pTmp = &j; /*正确:将pTmp指向变量j的地址*/ printf("pTmp = %d\n", *pTmp); (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */ printf("pTmp = %d\n", *pTmp); system("PAUSE"); return 0; }
3、
形式:int const *pTmp
含义:与2相同, 表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变。
int main(int argc, char *argv[]) { int i = 1; int j = 100; const int *pTmp = &i; /*正确:表示pTmp所指向的对象是只读的,但pTmp可指向其他地址,即pTmp可变*/ printf("pTmp = %d\n", *pTmp); i = 2; printf("pTmp = %d\n", *pTmp); pTmp = &j; /*正确:将pTmp指向变量j的地址*/ printf("pTmp = %d\n", *pTmp); (*pTmp)++; /*错误,pTmp指向的对象是只读的,编译出错提示:assignment of read-only location */ printf("pTmp = %d\n", *pTmp); system("PAUSE"); return 0; }
4、
形式:int * const pTmp
含义:pTmp不可修改,但pTmp所指向的对象可以修改。
int main(int argc, char *argv[]) { int i = 1; int j = 100; int * const pTmp = &i; printf("pTmp = %d\n", *pTmp); i = 2; printf("pTmp = %d\n", *pTmp); pTmp = &j; /*错误,pTmp不可修改,编译提示:error:assignment of read-only variable `pTmp'*/ printf("pTmp = %d\n", *pTmp); (*pTmp)++; /*正确,pTmp所指向的对象可以修改 */ printf("pTmp = %d\n", *pTmp); system("PAUSE"); return 0; }
5、
形式:const int * const pTmp
含义:pTmp不可修改,pTmp所指对象也不能修改。
int main(int argc, char *argv[]) { int i = 1; int j = 100; const int * const pTmp = &i; printf("pTmp = %d\n", *pTmp); i = 2; /*正确*/ printf("pTmp = %d\n", *pTmp); pTmp = &j; /*错误:error: assignment of read-only variable `pTmp'*/ printf("pTmp = %d\n", *pTmp); (*pTmp)++; /*错误:error: increment of read-only location*/ printf("pTmp = %d\n", *pTmp); system("PAUSE"); return 0; }
总结:
const int *p和int const *p等效,p可以指向别处,但不能通过 *p来操作p所指的数.(可以记为:const修饰 *p)
int * const p , p不能指向别处,但p所指的数可以用*p来操作.(记忆:const修饰p)
const int * const p ,p不能指向别处,且p所指的数不能用*p来操作.(前一个const修饰 *p,后一个const修饰p)
注意:
上面的四个例子中,const的限制都仅对p有效,例如:
const int * const p = &i; //取i的地址赋给pi=2; //编译正确.const限制仅对p指针操作有效,直接对i进行操作不受限制
部分转自
http://www.cnblogs.com/dyx1024/archive/2012/05/13/2556671.html
- C:带有const修饰的指针解读
- C:带有const修饰的指针解读
- C++:带有const修饰的指针解读
- 带有const修饰的指针解读
- 带有const修饰的指针解读
- [c/c++]const修饰指针
- c/c++ 自己对const修饰指针的理解
- C语言里的const和指针修饰关系
- c语言的指针、数组和常量修饰符const
- const 修饰指针的问题
- const修饰的多级指针
- const修饰指针的用法
- C语言--const修饰指针解析
- C语言const关键字修饰指针
- c语言中const修饰指针变量
- C/C++ const 修饰指针变量
- C语言const的修饰
- 关于const修饰指针的理解
- 随笔
- 安卓开发:上下文菜单
- 用java写递归程序,从1打印到n
- 《软技能——代码之外的生存指南》读书笔记之职业(二)
- 一篇文章学懂Shell脚本
- C++:带有const修饰的指针解读
- window.location和window.location.href区别详解
- Java移位运算,你可能不知道的运算
- 产品经理常见的6大文案陷阱
- HDU 2014 青年歌手大奖赛_评委会打分
- 第4章 初始不是需求阶段
- (洛谷P2014 选课)<树形DP>
- RocketMQ源码解析:Message拉取&消费(上)
- java实现百万级数据导出excel