码迷,mamicode.com
首页 > 编程语言 > 详细

[C++] Const详解

时间:2017-11-05 23:31:50      阅读:287      评论:0      收藏:0      [点我收藏+]

标签:teacher   处理   兼容   添加   null   作用域   original   efi   常量   

/****************************************************************
初级理解:
    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\r\n", a); *p = 11; printf("modify a = %d\r\n", a); //实际打印的是符号表里的a printf("modify *p = %d\r\n", *p); printf("同样的代码如果放在C编译器里,则为 10 11 和 11 .\r\n"); 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】 }

 

[C++] Const详解

标签:teacher   处理   兼容   添加   null   作用域   original   efi   常量   

原文地址:http://www.cnblogs.com/-Mr-y/p/7789204.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!