`
tomhibolu
  • 浏览: 1380168 次
文章分类
社区版块
存档分类
最新评论

关注C++细节——万能const限定符与指针

 
阅读更多

不记得谁说过,能用const的时候尽量用const。确实,const为增加程序的健壮性做出了很大贡献,但是const修饰指针的时候还是值得注意的。

一.指向const对象的指针;

如果指针指向const对象,那么很显然不能通过指针改变其所指向的const值。为了保证这个特性,C++语言强制要求指向const对象的指针也必须要具有const特性。

const double = 1.0;

const double *cpt;

cpt=&d;

const类型的指针变量为什么可以重新赋值?其实这里的cpt是一个指向double类型const对象的指针,const限定的是cpt指针所指向的对象类型,而并非cpt本身。也就是说,cpt本身并不是const。所以cpt在定义的时候不需要一定初始化,允许给cpt重新赋值,指向另一个const对象。

需要注意:可以把一个普通对象的地址赋给指向一const对象的指针,但不可以把一个const对象地址赋给一个普通类型指针,否则会出现编译错误。不能使用指向const对象的指针修改基础对象。无论const指针指向的对象是不是const类型,系统都会把它所指的所有对象都视为const,仅限于该指针的const对象(通过该指针不能修改其值);

二.const指针;

除指向const对象的指针外,C++语言还是提供了const指针——本身的值不能修改。

int iNum = 1;

int * const icpt=&iNum;

这里的icpt是const类型——不能再指向其他的对象。任何企图给const指针赋值的行为都回导致编译错误。这里值得注意的是指针本身的const类型并没有说明是否能用该指针修改它所指向对象的值。指针所指对象的值能否修改完全取决于该对象的类型。

int iNum = 5;

int * const icpt=&iNum;

*icpt=4;//这里完全可以,因为iNum是普通变量

三.指向const对象const指针;

这里要说明的就是上两种情况的结合出现,即const类型的指针指向了const类型的对象。

const double pi=3.14;

const double * const pt=π

今天先总结这么多了,欢迎大家留言交流学习。


分享到:
评论

相关推荐

    C++ 中const总结

    const 限定符把一个对象转换成一个常量,如 const int bufSize=512; 申 明 bufSize 的时候,如果不将它初始化,那么编译器会报错:const object must be initialized if not extern。因为 bufSize 被 const 限定符...

    C++ 指针 及其实例

    指针的定义与运算 指针与数组的关系 字符串函数 指针与const限定符 传递指针参数 动态内存分配方法 函数指针

    C++Primer const限定符

    用关键字const对变量的类型加以限定,可以将变量定义成一个常量。因为const对象一旦创建后其值就不能再改变,所以const对象必须初始化 const int bufsize = 512; //bufsize被定义为一个常量,任何试图为bufsize赋值...

    C++ const用法及注意事项

     (一) const限定符(p49)  定义const对象时要初始化  除非特别说明,在全局作用域声明的const变量是定义该对象为文件的局部变量。此变量只存在于那个文件中,不能被其他文件访问  通过制定const变量为...

    C++中const与指针、引用的分析

    C++中函数的参数相比C语言中的函数参数要复杂的多,其中主要的原因是C++中引入了引用以及const限定符。这两个对象的引入,使得C++中的函数参数变得异常的复杂多变,每一种类型都具有比较适合的使用范围。 本文详细...

    浅析c++ 中const关键字

    const是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。 define与...

    Linux C程序设计大全

    4.4.3 限定修饰符const 4.4.4 const关键字修饰指针——在指针定义之前 4.4.5 const关键字修饰指针——在指针定义之中 4.4.6 const关键字修饰指针——在指针定义之前和定义之中 4.4.7 使用const关键字的意义 第5章 ...

    详解C++中const_cast与reinterpret_cast运算符的用法

    指向任何对象类型的指针或指向数据成员的指针可显式转换为完全相同的类型(const、volatile 和 __unaligned 限定符除外)。对于指针和引用,结果将引用原始对象。对于指向数据成员的指针,结果将引用与指向数据成员...

    非常经典的c++ primer视频教程6-10

    4.2.5 指针和const限定符 4.3 C风格字符串 4.3.1 创建动态数组 4.3.2 新旧代码的兼容 4.4 多维数组 第5章 表达式 5.1 算术操作符 5.2 关系操作符和逻辑操作符 5.3 位操作符 5.3.1 bitset对象或整型值的...

    C++基础入门教程(八):函数指针

    主要介绍了C++基础入门教程(八):函数指针,本文讲解了函数原型和函数定义、const限定符与指针、函数的指针参数、为什么要使用指针参数等内容,需要的朋友可以参考下

    C++ Primer第四版【中文高清扫描版】.pdf

    4.2.5 指针和const限定符 110 4.3 C风格字符串 113 4.3.1 创建动态数组 117 4.3.2 新旧代码的兼容 120 4.4 多维数组 122 小结 124 术语 125 第5章 表达式 127 5.1 算术操作符 129 5.2 关系操作符和逻辑操作符 131 ...

    一个月挑战 C++ 语言 教程 书籍 .txt 格式

    文件 .txt 格式,方便编辑,打印 01.C_C++中利用数组名指针进行排序实例.txt ...03.入门教程C++中的const限定修饰符.txt ... 有空多去去 http://meooo.download.csdn.net/ 也许有你喜欢东西和书籍......

    C++Primer视频(初级)下载地址

    第4章指针和const限定符 33.第4章C风格字符串 34.第4章创建动态数组 35.第4章新旧代码的兼容 36.第4章多维数 37.第5章算术操作符 38.第5章关系操作符和逻辑操作符 39.第5章位操作符 40.第5章赋值...

    零起点学通C++学习_多媒体范例教学代码

    1.2 C++与C的区别 1.3 学习c++之前需要先学C吗 1.4 c++与其他语言的区别 1.5 c++的版本以及安装问题 第2章 做一个最简短的C4-+程序 2.1 简单的屏幕输出小程序 2.2 输出语句的使用 2.3 std::介绍 2.4 ...

    零起点学通C++多媒体范例教学代码

    1.2 C++与C的区别 1.3 学习c++之前需要先学C吗 1.4 c++与其他语言的区别 1.5 c++的版本以及安装问题 第2章 做一个最简短的C4-+程序 2.1 简单的屏幕输出小程序 2.2 输出语句的使用 2.3 std::介绍 2.4 iostream与...

    C++ primer 第4版 原书+习题解答+源码 清晰pdf

     2.4 const限定符  2.5 引用  2.6 typedef名字  2.7 枚举  2.8 类类型  2.9 编写自己的头文件  小结  术语  第3章 标准库类型  3.1 命名空间的using声明  3.2 标准库string类型  3.3 标准库...

    C++Primer中文版(第4版).part4

     2.4 const限定符  2.5 引用  2.6 typedef名字  2.7 枚举  2.8 类类型  2.9 编写自己的头文件  小结  术语  第3章 标准库类型  3.1 命名空间的using声明  3.2 标准库string类型  3.3 标准库...

    Visual C++开发经验技巧宝典(第1章)

    0055 访问限定符分析 21 0056 访问其他类的私有成员函数 21 0057 如何定义友员类 22 1.7 多态 23 0058 纯虚函数的使用 23 0059 覆盖基类的成员函数 23 0060 如何应用多重继承 24 0061 如何利用虚函数...

    C++大学教程,一本适合初学者的入门教材(part2)

    5.5 指针与常量限定符 5.6 按引用调用的冒泡排序 5.7 指针表达式与指针算法 5.8 指针与数组的关系 5.9 指针数组 5.10 实例研究:洗牌与发牌 5.11 函数指针 5.12 字符与字符串处理简介 5.12.1 字符与字符串...

    C++大学教程,一本适合初学者的入门教材(part1)

    5.5 指针与常量限定符 5.6 按引用调用的冒泡排序 5.7 指针表达式与指针算法 5.8 指针与数组的关系 5.9 指针数组 5.10 实例研究:洗牌与发牌 5.11 函数指针 5.12 字符与字符串处理简介 5.12.1 字符与字符串...

Global site tag (gtag.js) - Google Analytics