浅析C++之指针和const限定符号
2017-03-22 17:27
363 查看
1、指向const对象的指针
如果指针指向const对象,则不允许用指针来改变其所指的const值:
⚠️:不能通过指向const对象的指针修改基础对象,然而如果该指针指向的是一个非const对象,可用其它方法修改其所指的对象:
如果指向const的指针所指的对象并非const类型,则可以直接给该对象赋值,或者间接利用其他非const指针来修改其值。要记住,不能保证指向const的指针所指对象的值一定不可修改。
可以把指向const对象的指针理解为“自以为指向const的指针”。
2、const指针
上述定义可以读作“指针p是指向int型对象的const指针”。
与任何const常量相同,const指针也必须在定义时初始化。然后const指针不能再指向其它对象。
但const指针所指对象的值能否修改完全取决于该对象的类型。
问题:引用可以用常指针实现吗?
引用和常指针共同点:定义时都必须初始化,初始化之后都不能再指向其它的对象。
但是常指针可以初始化为NULL,而引用不行,引用总是指向某个对象。其它的引用和常指针差不多。
3、指针和typedef
给出以下语句:
声明const pstring时const修饰的是pstring的指针,因此该句声明应该是把p定义为指向string类型对象的const指针。等价于:
这里之所以容易产生歧义,是因为const限定符既可以放在类型前也可以放在类型后,例如:
如果指针指向const对象,则不允许用指针来改变其所指的const值:
const double *cptr ; *cptr = 42; //❌,不能用该指针修改其所指值也不能把一个const对象的地址赋给一个普通的、非const对象的指针,会编译错误:
const double pi = 3.14; double *ptr = &pi //❌ const double *cptr = &pi //可以允许把非const对象的指针赋给const对象的指针:
const double *pi; double pval = 3.14; pi = &pval; //可以,但是不能通过pi修改oval的值
⚠️:不能通过指向const对象的指针修改基础对象,然而如果该指针指向的是一个非const对象,可用其它方法修改其所指的对象:
double pval = 3.1415; const double *pi = &pval; *pi = 3.14; //❌ double *copy = &pval; *copy = 3.14; //✅ cout << *pi << endl; //3.14总结:
如果指向const的指针所指的对象并非const类型,则可以直接给该对象赋值,或者间接利用其他非const指针来修改其值。要记住,不能保证指向const的指针所指对象的值一定不可修改。
可以把指向const对象的指针理解为“自以为指向const的指针”。
2、const指针
int num = 0; int *const p = #
上述定义可以读作“指针p是指向int型对象的const指针”。
与任何const常量相同,const指针也必须在定义时初始化。然后const指针不能再指向其它对象。
但const指针所指对象的值能否修改完全取决于该对象的类型。
问题:引用可以用常指针实现吗?
引用和常指针共同点:定义时都必须初始化,初始化之后都不能再指向其它的对象。
但是常指针可以初始化为NULL,而引用不行,引用总是指向某个对象。其它的引用和常指针差不多。
3、指针和typedef
给出以下语句:
typedef string *pstring; const pstring p;请问:p是什么类型的指针?
声明const pstring时const修饰的是pstring的指针,因此该句声明应该是把p定义为指向string类型对象的const指针。等价于:
string *const p;
这里之所以容易产生歧义,是因为const限定符既可以放在类型前也可以放在类型后,例如:
string const s1; const string s2;用typedef写const定义时,const限定符加在类型前容易引起对所定义的真正类型的误解:
string s; typedef string * pstring; const pstring p1 = &s; pstring const p2 = &s; string *const p3 = &s;上面的三个p1,p2 ,p3是等价的。
相关文章推荐
- C++ const 限定符 指针的使用方法
- C++对指针使用const 限定符
- C++指针和const 限定符
- 浅析C++中的this指针
- c++中的const 限定修饰符
- 浅析带const的指针或引用复杂声明
- 浅析C++中的this指针
- 新手入门学习:浅析c/c++中的指针
- 关于C、C++中的const和指针
- 21天学通c++之第二周 指针 8.10 使用指向const对象的指针
- C++中const用法浅析
- 浅析C++中的this指针
- c++中const限定修饰符
- c++ const和指针复合使用说明
- c++中的 const与指针
- c++中的const与指针
- 浅析C++中的this指针
- const限定修饰符,常量指针,引用类型
- C++中const用法浅析
- C++点滴——const/volatile不能用来修饰没有this指针的成员函数