第12课 经典问题解析一

Posted wanmeishenghuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第12课 经典问题解析一相关的知识,希望对你有一定的参考价值。

关于const的疑问:

const什么时候是只读变量?什么时候是常量?

const常量的判别准则:

技术分享图片

 

技术分享图片

示例程序与结果如下:

技术分享图片

 

从输出结果可以看出,它们代表的是同样的内存空间。这个程序告诉我们,C++为const修饰的变量仍然分配空间。一般通过指针或者引用来使用这片空间。

 示例程序:

技术分享图片

 

第20行将y的地址转换为非const的指针。并在22行修改这块地址空间的值。

示例程序:

技术分享图片

 

27行将y赋值给用const修饰的z将生成一个只读变量z。而不是真正意义的常量。

示例程序:

技术分享图片

 

打印结果为a,a,c。第40行将字符a赋值给char引用rc,但是这并不影响引用trc的值,因为trc在初始化的时候使用的是不同类型的变量,即trc是int型引用,c是char型,这样就导致又产生一个只读变量,因此,我们在40行改变rc(rc和c指的同一片空间)的值,不会影响到trc所代表的内存空间。

 

引用与指针有什么关系?如何理解“引用的本质就是指针常量”?

技术分享图片

 

 

 

技术分享图片

技术分享图片

 

为了回答上图中的问题,给出如下的程序:

技术分享图片

 

上图中的程序编译运行没有错误。

再次修改程序,结果如下:

技术分享图片

 

我们在17行添加了数组的定义,结果编译出错了。

原因在于,C语言中的数组中每个元素都是相邻的,地址是递增的,而C++兼容C语言,因此,C++具有同样的特性。

而17行的引用数组破坏了这个特性。因为这几个元素的地址已经不是相邻的了。

在C++中不支持引用数组。

小结:

  指针是一个变量

  引用是一个变量的名字

  const引用能够生成新的只读变量

  在编译器内部使用指针常量实现引用

  编译时不能直接确定初始值的const标识符都是只读变量

 

以上是关于第12课 经典问题解析一的主要内容,如果未能解决你的问题,请参考以下文章

第24课 经典问题解析二

第55课 经典问题解析

第24课经典问题解析(下)--------类的成员函数和成员变量隶属某个具体对象吗

第六十七课经典问题解析五

第五十五课经典问题解析四

第41课 内存操作经典问题分析一