C++指针与const
2016-05-08 00:14
218 查看
在C++中,const修饰符一般用于修饰常量。常量在定义的时候必须初始化,而且值一旦定义之后就不能修改,这样就能保证常量的值在程序运行过程中不会发生变换。
1.指向const对象的指针
指向const对象的指针本身的指向可以发生变换,但是不可以通过该指针修改所指向变量的值。指向const对象的指针在定义的时候无需初始化,而且这种类型的指针也可以指向普通变量,只不过不能通过该指针修改对应变量的值,即便对应变量不是常量。指向常量的指针在类型标识符前必须有const修饰符修饰,否则编译不通过。
指向const对象的指针的定义与用法如下所示:
2.const 指针
const指针本身是常量,其值必须在定义时初始化,且const指针指向的地址在初始化之后无法修改。const指针不能指向常量(除非是指向const对象的const指针),但是可以通过const指针修改其指向的变量的值。
const指针的定义及用法如下所示:
3.指向const对象的const指针
指向const对象的const指针同时具有1和2中指针的属性。首先不能通过该指针改变其指向对象的值,即便其指向的对象是常量(还是可以指向一般变量的,只是不能通过该指针修改指向的变量的值);另外该指针的值一旦初始化,之后不能修改,而且该指针的值必须在定义时初始化。
指向const对象的const指针的定义及使用如下所示:
附录:指针和typedef
设使用typedef定义了下述数据类型:
那么cstr和cstr1真实的数据类型是什么?此时需要认识到const修饰的是pstring的类型,这是一个指针,所以const是直接修饰指针的!因而cstr和cstr1的数据类型都是——
参考:C++ Primer 3rd
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
相关文章推荐
- 用gdb调试C与C++程序
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- C语言查看程序运行的时间
- C语言入门学习视频
- c++作业5
- Effective C++: std::bind特性/std::bind实现.
- C++11: chrono
- C++学习零碎知识
- 弄清楚C语言中的取反和反码
- 循环队列(C语言实现)
- C语言中,结构体成员变量的点和箭头
- 算法导论——红黑树插入算法C++实现
- C++ 从数据库读取数据,将数据显示在界面上的TreeCtrl上
- c++作业5,数组分离,成绩,数组选择
- c++第五次作业
- 链表1
- 值得推荐的C/C++框架和库
- C++实验5--数组分离
- 如何用c语言调用c++做成的动态链接库