C++/C常量

 


简介

1. 易忽略的常量:函数地址(函数名)、静态数组的名字、字符串常量的地址。

2. 常量分类:字面常量、符号常量、契约性常量、布尔常量、枚举常量。


 常量认知

1. 字面常量

包括:各种进制的数字、字符、字符串。

存储位置:程序的符号表中,非数据区。只能引用不能修改。只允许获取字符串的地址。

1 x=-100.25f;
2 char c='a';
3 const char *pchar = "abcd";
4 int *pInt = NULL;

2. 符号常量

包括:#define 定义的宏常量、const定义的常量。

#define

//const常量存储方式

1. #define 定义的宏常量在进入编译阶段之前就已经被替换为字面常量,宏常量的本质就是字面常量

 

 

 

 

 

const

//const常量存储方式

1. C中,const常量为值不能修改的变量,分配存储空间。

2. C++中,基本数据类型的const常量放置在符号表中,

                     ADT数据类型、强制extern的const常量分配存储空间。

     //有用的实践

3. 取const常量的地址:

    基本数据类型const常量:编译器在内存中创建一个拷贝,实际访问的是拷贝地址,非原始地址,无法通过指针修改基本类型const常量。

    构造数据类型const常量:可以通过获取常量指针,绕过编译器修改const常量。

结论:只要得到对象的指针(内存地址),就可以越过编译器修改其内容,除非受到操作系统保护。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 3. 使用符号常量替代字面常量

why:

a.提高程序可读性。

b.方便多处的相同数字或字符串修改。

c.避免多次输入同样的数字或字符串引入错误。

 

4. 类中的常量

作用:

将常量与类关联在一起,使其只在类中生效。

方式:

a.单个对象中的常量

类中声明的const常量:

//只是对象声明周期内的常量

//不同对象的const常量可不同

 1 class A
 2 {
 3         A(int size)
 4         const int SIZE; //常量声明
 5                          const int size=10 错误的用法
 6 };
 7 
 8 
 9 A::A(int size):SIZE(size) //利用构造函数初始化列表初始化常量
10 {
11 }
12 
13 A a(100); //SIZE==100
14 A b(200); //SIZE==200

 b.整个类内的常量:所有对象共享的常量

 enum常量:

enum常量不占据对象的内存空间

1 class A
2 {
3           enum
4          {
5           SIZE1=100;
6           SIZE2=100;
7           };
8           int array1[SIZE1];
9 };

static const 常量:

1 class A
2 {
3      static const int SIZE=100;//某些编译器不支持该用法
4     
5      int array[SIZE];
6 };

 

 

 

 

转载于:https://www.cnblogs.com/helo-blog/p/3779273.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值