C语言之常量
常量
常量,常量表达式和const关键字修饰的只读变量都存储在.rodata只读数据段中
1.字面值常量 literal
- 整形字面值
123
,0xff00ff
- 字符常量,类型总是 int,
'a'
,'\n'
- 宽字符常量
L'x'
,L'中文'
- 枚举
enum WEEK {A=2, B, C}
, 实际上是整型 - 浮点
3.14
缺省为double类型 - 指针常量 pointer constant, 较少用到,不可改指向
- 字符串常量 string literal
“hello”
-
存储在字符数组中的,以NULL字节结尾的0个或多个的字符
-
在表达式中的值是字符串的地址而不是字符本身,因此可以赋值给字符指针
-
不能赋值给字符数组(仅仅支持初始化的特殊形式)
char *p = "hello"; // 字符指针指向字符串常量 char a[] = "hello"; // 字符数组初始化 // 等价于 char a[] = {'h', 'e', 'l', 'l', 'o', '\0'}
-
2.命名常量 Named constant
初始化:
- 声明显示初始化
- 作为函数形参隐式初始化
3.辨析
常量定义:const关键字 VS define宏定义
- 变量和简单的字符串替换
- constant并不能算是真正意义的常量,只是不可修改的变量,验证思路?
常量和指针
- 常量指针
int const *p = &a; // 指向常量的指针,const修饰(*p), 改向不改值
- 指针常量
int * const p = &a; // 指针类型的常量,const修饰p, 改值不改向
4.参考资料
- 《C和指针》
- 3.1 基本数据类型
- 3.4 常量
- 《嵌入式C语言的自我修养》
- 7.7 常量和变量
- 《C程序设计语言》
- 2.3 常量