zoukankan      html  css  js  c++  java
  • 第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标识符都是只读变量

  • 相关阅读:
    STM32F103RCT6项目RAM&ROM占用分析
    STM32使用jasson库程序卡死(freeRTOS/标准库)
    STM32使用OLED模块(SSD1306):OLED_DrawBMP()
    C语言内存管理
    C语言指针
    C语言数组
    C语言循环结构
    C语言函数
    C语言选择结构
    C语言运算符与表达式
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9527311.html
Copyright © 2011-2022 走看看