zoukankan      html  css  js  c++  java
  • [C++] Const详解

    /****************************************************************
    初级理解:
        1.const是定义常量 ==》const意味着只读
        2.以下const的变量必须初始化! 
    ***************************************************************/    
    /*----------------------------------------------------------------------------------
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------
        原因分析:
            const在C语言中是以分配内存的形式出现的!这样的话,就容易让指针有机可乘
            C语言中const变量是只读变量,有自己的存储空间
            
            const在C++中并不分配内存,而是放在了一个符号表里,表目是:key value    
                ->编译过程中若发现使用常量则直接以符号表中的值替换
                
                ->编译过程中若发现对const使用了 extern 或者 &操作符,
    则给对应的常量(如下面的符号表里a对应的常量10)分配内存空间(兼容C),然后将指针变量p指向这个内存空间 C++中的const常量 A.可能不分配存储空间 ... B.也可能分配存储空间 1).当const常量为全局,并且需要在其它文件中使用 2).当使用&操作符取const常量的地址

    Const和define的区别 C.1 const常量是由编译器处理的,提供类型检查和作用域检查
    C.2 宏定义由预处理器处理,单纯的文本替换

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    */ #include <iostream> #include <cstdio> #include <cstdlib> extern const int test = 11;//test如果要在别的文件共用,则不管是声明 还是 定义 都必须添加 extern struct Teacher{ char name[64]; int age; }; int main(void) { // const int a; //等价于 int const a; 代表一个常整形数a // // const int * c;//c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改) // // int * const d;// d是常指针(指针变量不能被修改,但是它所指向内存空间可以被修改) // // const int * const e;//e一个指向常整形的常指针(指针和它所指向的内存空间,均不能被修改) const int a = 10; int *p = (int*)&a;//必须人为的将const int* 转化为 int* //将符号表里a对应的10取出来建立一个独立的内存空间,并将p指向这个内存空间 printf("original a = %d ", a); *p = 11; printf("modify a = %d ", a); //实际打印的是符号表里的a printf("modify *p = %d ", *p); printf("同样的代码如果放在C编译器里,则为 10 11 和 11 . "); return 0; } /*———————————————————————————————————————————————— Const的两个应用 ————————————————————————————————————————————————*/ /*指针变量名->成员名 == (*指针变量名).成员名 */ int fun(const Teacher *p) { //Const修改形参的时候,在利用形参不能修改指针所向的内存空间,减少bug // p->age = 10;//【err】 // p = NULL;//【ok】 } int func(Teacher * const p) { // Const修改形参的时候,在利用形参不能修改指针本身,但可以修改所指向的内存 // p->age = 10;//【ok】 // p = 0; //【err】 }
  • 相关阅读:
    【java】一种自动生成数据库文档的方法
    sublime vintage mode 按住一个键(比如 j)不会重复的问题
    SQL Service服务更换帐户后无法启动的情况(Security 4625 Type 5)
    隐藏的计划任务运行,导致账户被锁的调查方法
    nodejs 热更新页面
    数组转tree arrToTree
    compose函数
    react 类组件的生命周期
    qiankun 微应用demo
    application 'xxx' died in status LOADING_SOURCE_CODE: [qiankun] You need to export lifecycle functions in xxx entry
  • 原文地址:https://www.cnblogs.com/-Mr-y/p/7789204.html
Copyright © 2011-2022 走看看