C语言中的const变量是只读,有自己的存储空间
C++中的const修饰的是一个真正的常量
- 可能有分配存储空间(对const使用了extern或&操作符),可能不会分配存储空间(其他情况)
- 当const常量为全局时,并且需要在其他文件中使用时会分配存储空间
- 当使用&操作符,取const常量的地址时会分配存储空间
- 当const int &a = 10; const修饰引用时,也会分配存储空间
如下第一个和第二个常整型
第三个c是一个指向常字符型的指针(所指向内存数据不能被修改,但本身可以修改)
第四个d 常指针(指针变量不能被修改,但它所指向内存空间可以被修改)
第五个e指向常字符型的常指针(指针和所指向内存空间均不能被修改)
const int a; //
int const b; //写法和上面一样
const char *c;
char * const d;
const char * const e ;
指针变量和所指向的内存空间变量不是同一个概念,看const放在*的左边还是右边也就是看const修饰指针变量还是修饰所指向的内存空间。
define
#define定义常量,但其没有数据类型
const常量是由编译器处理的,提供类型检查和作用域检查
宏定义由预处理器处理,单纯的文本替换,没有类型安全检查,并且在字符替换中可能会出现错误。