c/c++const实现原理解析
来源:互联网 发布:led手机显示屏软件 编辑:程序博客网 时间:2024/06/10 22:11
抛出问题
下列代码输出的结果是什么?
#include<stdio.h>#include<iostream>using namespace std;int main(){/*在c++下*/ const int a = 10; //a = 100;error int *p = (int*)(&a); *p = 100;//正确 cout << *p << endl; cout << a << endl; system("pause");}
resault:
100
10
讲解学习
原理
在C++中,被const修饰的变量,可能为其分配存储空间,也可能不分配存储空间。
有下面两种情况,会为这个变量分配存储空间:
1、当const常量为全局,并且需要在其它文件中使用时,(extern)
2、当使用取地址符(&)取const常量的地址时。
如果没有为这个变量分配空间的情况下,这个变量是不可能被改变的,也就是说,这个变量是实实在在的常量。这种情况下,没有任何争议。
解疑
下面咱们讨论文章的一开始举得例子。
const int a = 10;
变量a=10,a放在了符号表里面,这个值永远不会变。当取a的值的时候,就从符号表里面取,永远是10.
int *p = (int*)(&a);
定义一个新的指针变量p,指向变量a的地址。这时,会在栈上为变量a分配一个新的空间,存放变量a的值。然后用指针p指向这个空间。例如这个内存空间的地址是0x00FF00CC。
*p = 100;
把内存地址0x00FF00CC空间的值修改为100。
cout << *p << endl;//从内存0x00FF00CC中取值,等于100.cout << a << endl;//从符号表中取值,等于10.
c语言中的const
int main(){/*在c下*/ const int a = 10; //a = 100;//error int *p = (int*)(&a); *p = 100;//正确 printf("%d\n", *p);//100 printf("%d", a);//100 system("pause");}
在c语言中用const修饰的是常变量,不算真正意义上的常量
不可以直接修改但可以间接修改
1 0
- c/c++const实现原理解析
- C++const解析
- C 语言中的const 解析
- c语言const关键字解析
- c语言-指针 const解析
- C指针原理(24)-const类型
- 解析C与C++中的关键字const
- C语言--const修饰指针解析
- C++:const限定符基本解析
- C经典 const与指针解析
- GC原理解析(c#)
- GC原理解析(c#)
- const c
- const【C++】
- const ||c
- C++Const
- [c++]const
- C++:const
- hibernate学习笔记第一天(1)
- 微信公众号项目笔记 二
- MFC Windows程序设计学习笔记--控件
- 小波变换在数字图像上的应用(上)
- 前端工具之git
- c/c++const实现原理解析
- 流媒体基础知识
- Hive-模式设计
- 排序算法之归并排序
- HDU-1075-What Are You Talking About
- android studio 导入外部库文件,以及将项目中module引用依赖
- GYM 101149 C.Mathematical Field of Experiments(水~)
- MFC小总结_1
- 团体程序设计天梯赛-练习集 L3-005. 垃圾箱分布 dijkstra 解题报告