博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C++] Const详解
阅读量:5160 次
发布时间:2019-06-13

本文共 2576 字,大约阅读时间需要 8 分钟。

/****************************************************************初级理解:    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 
#include
#include
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】}

 

转载于:https://www.cnblogs.com/-Mr-y/p/7789204.html

你可能感兴趣的文章
[转载]mysql的left,right,substr,instr截取字符串,截取
查看>>
Visual Studio自定义模板(二)
查看>>
【Mood-20】滴滤咖啡做法 IT工程师加班必备 更健康的coffee 项目经理加班密鉴
查看>>
摘抄详细的VUE生命周期
查看>>
javascript高级程序设计---js事件思维导图
查看>>
sprint计划会议
查看>>
读《构建之法-软件工程》第四章有感
查看>>
使用 Printf via SWO/SWV 输出调试信息
查看>>
.net 分布式架构之分布式锁实现(转)
查看>>
吴恩达机器学习笔记 —— 3 线性回归回顾
查看>>
Bouncy Castle内存溢出
查看>>
多线程_java多线程环境下栈信息分析思路
查看>>
机器学习数学【1】
查看>>
Problem E: Automatic Editing
查看>>
Java数组排序
查看>>
SpringBoot 使用 MyBatis 分页插件 PageHelper 进行分页查询
查看>>
《DSP using MATLAB》Problem 6.17
查看>>
微信公众平台开发实战Java版之如何网页授权获取用户基本信息
查看>>
一周TDD小结
查看>>
(三)建筑物多边形化简系列——去除冗余点
查看>>