c语言常量的使用,define const等等
来源:互联网 发布:妩媚知乎 编辑:程序博客网 时间:2024/06/05 04:56
c语言常量
本文章已收录于:
- 常量:(不可以定义结构型常量) 常量包括字面常量,符号常量,契约型常量,枚举常量这几种类型。
- 字面常量包括:整形常量,字符型常量,字符串常量。注意:不存在数组常量,结构体常量等结构型的字面常量。但是存在结构型的符号常量
- 符号常量:(可以定义结构型常量) 用#define和const定义的常量!这两种常量之间的区别:
- #define定义的常量,除了字符串字面常量外都不占内存,所以无法取常量的地址,仅仅是宏替换而已eg:#define NAME “pang dong” 本质是字符串字面常量,会占用“静态存储区” #define MAX 256 本质是整形的字面常量,不会分配内存
- const定义的常量要分情况考虑: 你可以去一个const符号常量的地址:对于基本数据类型的const常量,编译器会重新在内存中创建一个他的一个拷贝,(真正的基本数据类型的const常量会被编译器放到符号表中而不分配内存空间)你通过其地址访问到的就是这个拷贝而不是原始的符号常量;而对于构造类型的const常量,实际上他是编译时不允许修改的常量,是占内存空间的,因此如果你能绕过编译器的静态类型安全检查机制,就可以在运行时修改其内存单元。从理论上讲,只要握有一个对象(针对C++中的结构类型常量)的指针,你就可以设法绕过编译器修改它的内存。详见《林锐-第三版》P86
- 使用符号常量的好处如果不使用符号常量,而是直接在程序中填写数字或字符串,将会有哪些麻烦呢?
- 程序的可读性(可理解性)变差。程序员自己会忘记那些数字或字符串是什么意思,用户则更加不知它们从何处来、表示什么。
- 在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。
- 如果要修改数字或字符串,则会在很多地方改动,既麻烦又容易出错。
- const与#define的比较C++语言可以用const来定义常量,也可以用#define来定义常量。但是前者比后者有更多的优点:
- const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。
- 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。【规则】在C++程序中只使用const常量而不使用宏常量,即const常量完全取代宏常量。
0 0
- c语言常量的使用,define const等等
- c语言const常量使用
- C语言 用const修饰符定义只读常量,只读常量与#define定义的符号常量的区别
- C/C++中define定义的常量与const常量
- C语言之变量、常量(define\const)、变量的声明和定义
- C/C++: const常量与define宏定义的区别
- C语言的const vs define
- c语言----#define、const、typedef的差别
- C++的const和C语言#define
- C语言 #define 与 const的区别
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- iOS 宏(define)与常量(const)的正确使用
- 解决绘制theano图形时出现的`Runtime Error: Failed to import pydot’错误
- 栈的静态顺序存储表示
- Dataguard Switch Over切换演练步骤
- 我的shiro之旅-realm
- 第13周 阅读程序2-(3)交通工具类之纯虚函数
- c语言常量的使用,define const等等
- NGUI OnChange Event
- 机制而非策略
- 对象
- OpenCV&OpenCL宏观预览
- java自学之旅(2.3)关于Calendar类常用方法
- Android学习笔记----解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
- 可空值类型
- 使用SVG开发音乐播放器(二)