关于const变量的一点理解
无意间看到一题目 是关于const变量的。代如下:
问题是:pCInt = &LENGTH。然而后面的输出是1 2。为什么???
一步一步分析,const int *pCInt = & LENGTH;pCInt 为指向LENGTH地址的值,且为常量。
(int) *pCInt = 2; 实际上等同const_cast<int>(*pCInt) = 2;
去掉变量的常量属性再赋值。也就是改变了 pCInt 指向的地址的值为2。
即然值为2,那么LENGTH中内存的值也为2,为什么会输出1呢?是不是编译器做了什么处理?(我当时给出的回答就是编译器做出了处理,具体是什么不清楚)
后来仔细想了下,可能是符号替换,不知道对不。
下面用汇编代码来验证我们的想法。
(为了看得清楚,把cout改成printf了)
从printf("%d/n",LENGTH);
00401056 push 1
可以看出,编译器是做的符号替换,就是在编译的时候遇到LENGHT直接替换为1。
printf("%d/n",*pCInt);
00401065 mov eax,dword ptr [pCInt]
00401068 mov ecx,dword ptr [eax]
遇到*pCInt是直接从内存中去取值。
总结如下:
1.变量本身的类型最好不要去改变,除非必要。
2.要明确cosnt的意义,什么时候该用,什么时候不该用,这是基本功。
3.理解符号替换,就相当于宏定义。
关于const变量的一点理解相关推荐
- C语言 const、volatile、const volatile限定符理解
在C语言经常会用到变量类型限定符const和volatile,但是const和 volatile也可以一起使用.下面就一次分析一下这三种情况的使用方法. 1.const 从字面意思理解,意思就 ...
- var和let和const_用故事讲解JavaScript的var,let和const变量
var和let和const by Prarthana S. Sannamani 通过Prarthana S.Sannamani 用故事讲解JavaScript的var,let和const变量 (Jav ...
- 编译器在处理const变量跟一般变量时的区别
const变量,也就是常量,当某个变量加上const属性的时候,表明这个变量不可修改. const变量是不可写的,那么我们对于const变量的处理只剩下读操作了. 当我们读一般的变量的时候,会先获取该 ...
- 2.深入一点理解C源程序的编译过程
2.深入一点理解C源程序的编译过程 本文章的大多数灵感及知识来源于南京大学的计算机系统基础教材,如果希望更加深入地对相关知识做进一步了解,可以移步上述相关资源.在网上可以轻易获得上述资源,mooc也有 ...
- linux useradd bash,对于bash:useradd:command not found错误的一点理解
对于bash:useradd:command not found错误的一点理解 问题: 前两天做实验,在命令行中添加用户时显示bash:useradd:command not found的错误,在网上 ...
- oracle中sga可以共享么,关于共享段与SGA的一点理解
关于共享段与SGA的一点理解 上一周买了两本书,google了不少文档资料,看了看部分linux源代码终于有了以下一些理解.不知对不对 一 各类地址概念 1 逻辑地址:我们一般在用汇编语言写程序时可能 ...
- C语言 const变量能不能修改?
笔者在跟同事讨论变量存放的分区问题时,讨论到了const标识符所标记的变量能不能修改这个问题. 按直观理解,const关键字标识的变量,意味不能修改的变量,引申理解,猜测其可能存放在.rodata分区 ...
- mixin机制 vue_谈谈vue中mixin的一点理解
谈谈vue中mixin的一点理解 vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用.最开始我一度认为这个和组件好像没啥区别..后来发现错了.下面我们来看看mixins和普通情 ...
- 定义const变量是不可以赋值_定义好 const 变量
我们 a 组组长发了一张图过来,说是为什么之前把 dateModeTransform.js 处理日期的改了,让我改回来,说是要用到 年月日时分秒,还有之前的写法也有很多不妥的地方就是传递的参数太多了, ...
最新文章
- 设计模式复习-装饰模式
- 怎么用matlab处理数据,如何用Matlab处理.wfm格式的数据
- Eclipse连接到My sql数据库之前操作
- uestc 方老师的分身 III 拓扑排序
- python 列表为空_如果列表为空,则Python返回False
- 《软件开发这点事儿》作者邵志东老师视频发布
- 什么是servlet ,servlet的作用
- 液晶拼接处理器_你想了解的LCE拼接屏幕都在这里
- cocos creator后台切入切出
- 服务器网页多重定向,浏览器提示该网页包含太多服务器重定向是什么意思 - 卡饭网...
- 几种不同格式的json解析
- hive client 登录报权限不足问题/tmp/hive on HDFS should be writable. Current permissions are: rwx------
- 利用bilibili增强脚本下载B站视频+更多强大功能
- 【Hive】解析复杂json格式字段
- win7右键计算机死机,win7系统右键死机的解决方法
- Linux IPTABLES 防火墙专题讲座 - 上篇-龙小威-专题视频课程
- EXPLAIN 使用
- Google Voice的简单介绍。(一点都不简单)
- 文件用手机拍照片打印时,打印出来总是有黑阴影,如何去掉黑色阴影打印清晰的图片
- 决策树算法梳理以及python实现