博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++指针与const
阅读量:5009 次
发布时间:2019-06-12

本文共 1590 字,大约阅读时间需要 5 分钟。

  在C++中,const修饰符一般用于修饰常量。常量在定义的时候必须初始化,而且值一旦定义之后就不能修改,这样就能保证常量的值在程序运行过程中不会发生变换。

1.指向const对象的指针

  指向const对象的指针本身的指向可以发生变换,但是不可以通过该指针修改所指向变量的值。指向const对象的指针在定义的时候无需初始化,而且这种类型的指针也可以指向普通变量,只不过不能通过该指针修改对应变量的值,即便对应变量不是常量。指向常量的指针在类型标识符前必须有const修饰符修饰,否则编译不通过。

  指向const对象的指针的定义与用法如下所示:

const int a=1;int b=1; //指向常量的指针在定义时无需初始化const int *cptr;//将const放在类型前面或者后面,二者的意义完全相同int const *cptr;int *ptr;cptr= &a;*cptr =2 ;//非法,不能通过该指针修改指向变量的值cptr =&b; *cptr = 3;//非法,不能通过该指针修改指向变量的值,即便指向的变量不是常量ptr =&b;*ptr=3;//合法!ptr =&a;//非法,指向常量的指针强制要求在类型标识符前使用const修饰符,否则编译不通过

2.const 指针

  const指针本身是常量,其值必须在定义时初始化,且const指针指向的地址在初始化之后无法修改。const指针不能指向常量(除非是指向const对象的const指针),但是可以通过const指针修改其指向的变量的值。

  const指针的定义及用法如下所示:

int a=1;const int b=2;int *const cptr;//非法,const指针在定义时就要初始化int *count cptr=&b;//非法,const指针不能指向const对象,除非该指针是指向const对象的const指针int * const cptr =&a;*a=2;//可以通过const指针修改其指向的变量的值

3.指向const对象的const指针

  指向const对象的const指针同时具有1和2中指针的属性。首先不能通过该指针改变其指向对象的值,即便其指向的对象是常量(还是可以指向一般变量的,只是不能通过该指针修改指向的变量的值);另外该指针的值一旦初始化,之后不能修改,而且该指针的值必须在定义时初始化。

  指向const对象的const指针的定义及使用如下所示:

const int a =1;int b=2;const int * const cptr;//非法,必须在定义时初始化const int * cosnt cptr =&a;int const * const cptr =&a;//上述两种顺序的定义意义完全一致const int * const cptr_1 =&b;//可以指向一般变量*cptr_1 =1;//非法,不能通过该指针改变其指向的对象的值,即便指向的对象不是常量*cptr=2;//非法,不能通过该指针改变其指向的对象的值

 

附录:指针和typedef

  设使用typedef定义了下述数据类型:

typedef string * pstring;const pstring cstr;pstring const cstr1;

  那么cstr和cstr1真实的数据类型是什么?此时需要认识到const修饰的是pstring的类型,这是一个指针,所以const是直接修饰指针的!因而cstr和cstr1的数据类型都是——

string * const ptr;

 

参考:C++ Primer 3rd

 

 

 

 

转载于:https://www.cnblogs.com/zhoudayang/p/5469583.html

你可能感兴趣的文章
文件缓存
查看>>
关于C语言中return的一些总结
查看>>
Codeforces Round #278 (Div. 2)
查看>>
51. N-Queens
查看>>
Linux 命令 - 文件搜索命令 locate
查看>>
[Grunt] grunt.template
查看>>
Ubuntu最小化桌面快捷键Super+D不生效解决
查看>>
Cookie&Session会话跟踪技术
查看>>
UNIX环境高级编程 第17章 高级进程间通信
查看>>
ES的Zen发现机制
查看>>
【hibernate】1、Hibernate的一个注解 @Transient
查看>>
HihoCoder 1877 - Approximate Matching
查看>>
Elastic Search 语法总结
查看>>
py自动化之环境配置
查看>>
Winodws SNMP服务安装和配置(Windows 2003 & 2008 R2)
查看>>
红黑树-想说爱你不容易
查看>>
【题目】英文字符进行频率的统计,直方图输出
查看>>
LeetCode-Binary Tree Level Order Traversal
查看>>
COM组件开发实践
查看>>
yii2 源码分析1从入口开始
查看>>