c中的const与c++中的const
来源:互联网 发布:维普中文期刊数据库 编辑:程序博客网 时间:2024/05/16 09:08
c中的const是一个伪只读标识符。
#include <stdio.h>#include <stdlib.h>int main(){ const int a = 10; int *p = &a; *p = 20; printf("%d\n",a); return 0;}
此时输出a的值为20,被指针间接的改变了。
c++中,const进行了增强,不在是一个伪标识符了。
const int a = 10;int *p = (int *)&a; *p = 20; cout << a << *p << endl; cout << &a << endl; cout<< p;
输出:
a :10;
*p :20;
两者的地址是一样的。
那么问题来了,既然两者所指向的地址是一样的,那为什么内容不一样呢?请继续往下看。
c++编译器引入了一个符号表,当碰见常量声明时,在符号表中存放常量,那么如何解释取地址呢?
编译过程中若发现使用常量则直接以符号表中的值替换编,译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间。
结论:
C语言中的const变量
C语言中const变量是只读变量,有自己的存储空间
C++中的const常量
可能分配存储空间,也可能不分配存储空间
当const常量为全局,并且需要在其它文件中使用
当使用&操作符取const常量的地址
联想 const和#define的区别
对比加深
C++中的const常量类似于宏定义
const int c = 5; ≈ #define c 5
C++中的const常量在与宏定义不同
const常量是由编译器处理的,提供类型检查和作用域检查
宏定义由预处理器处理,单纯的文本替换
void fun1(){ #define a 10 const int b = 20; //#undef}void fun2(){ printf("a = %d\n", a); //printf("b = %d\n", b);}int main(int argc, char *argv[]){ fun1(); fun2(); return 0;}
a 可以在fun2中使用,而b不能在fun2中使用,说明const提供了类型和作用域的检测。
阅读全文
1 0
- c中的const与c++中的const
- C与C++中的const
- C语言中的const与C++中的const
- C中的CONST
- C中的CONST
- C/C++ 中的const
- C中的CONST
- C中的CONST
- C/C++中的const
- c中的const
- C中的const
- C中的const
- C#.net中的const
- C#.net中的const
- C/C++中的const
- C中的const
- C语言中的const
- C语言中的const
- layer-------弹出层参数介绍
- 再谈java的内存泄露
- Hive SQL执行计划深度解析
- Android广播机制,BroadcastReceiver
- SwipeRefreshLayout 嵌套 ListView 滑动问题
- c中的const与c++中的const
- startManagedWebLogic <BEA-000365> <Server state changed to RUNNING.>
- latex中如何将表格的Table1改为表1
- 《舞步学院》教你聊天的新手课,不要再做一个沉默的暗恋者!
- Ubuntu16.04首次安装无法连网和将桌面左侧任务栏移到屏幕底部
- 生产车间管理使用ERP系统提高企业管理水平
- 比特币
- MySQL
- 开始学习Python!请多指教!