C

C知识汇总-常量

Posted by zihengCat on 2017-07-16

常量

常量,顾名思义,就是在程序运行期间,固定不变的量,这些固定的值,又被称做字面量
常量可以是任何的基本数据类型,包括整型数字、浮点数字、字符、字符串和布尔值。
程序运行期间,内存中有一块不可写区域用来存放常量。

常量分类

常量 说明
整型常量 1, 2, 3, 4 之类的常量,默认为10进制,可以8进制0或16进制0x表示,默认以int存储。
长整型常量 lL结尾的整数,以long存储。
无符号整型常量 uU结尾的整型常量。
浮点型常量 带小数点的数或以科学计数法表示的数,默认以double存储,可带f/Fl/L后缀改变其存储形式。
字符型常量 以单引号'包括的单个字符,以char存储。
字符串常量 以双引号"包括的一串字符序列。
枚举常量 整型常量值列表。

字符常量

一个字符常量是一个整数,书写时将一个字符括在单引号中,如,‘x’。字符在机器字符集中的数值就是字符常量的值。字符常量一般用来与其他字符进行比较,但也可以像其他整数一样参与数值运算。
某些字符可以通过转义字符序列(例如换行符\n)表示为字符和字符串常量。转义字符序列看起来像两个字符,但只表示一个字符。另外,我们可以用\ooo表示 任意的字节大小的位模式 。其中,ooo代表1~3个八进制数字[0-7]。这种位模式还可以用\xhhh表示,其中,hh是一个或多个十六进制数字[0-9, a-f, A-F]。

ANSI C语言的转义字符:

转义字符 含义
\a 响铃符
\b 退格符
\f 换页符
\n 换行符
\r 回车符
\t 水平制表符
\v 纵向制表符
\\ 反斜杠
\? 问号
\' 单引号
\" 双引号
\ooo 八进制数
\xhh 十六进制数
\0 空字符

字符串常量

字符串常量也叫字符串字面量,是用双引号"括起来的0或多个字符组成的字符序列。
编译时,相邻的多个字符串常量会被自动拼接起来。

"hello,"        " world"

等价于:

"hello, world"

字符串常量就是字符数组。字符串内部使用一个空字符\0作为串的结尾,因此,存储字符串的物理存储单元数比括在双引号中的字符数多1个 。
C语言对字符串的长度没有限制,但程序必须扫描完整个字符串后才能确定字符串的长度。标准库函数strlen可以返回字符串参数的长度,长度不包括末尾的\0
注意搞清楚字符常量与仅包含一个字符的字符串之间的区别:'x'"x"是不同的。前者是一个整数,其值是字母x在机器字符集中对应的数值(内部表示值);后者是一个包含一个字符(即字母x)以及一个结束符\0的字符数组。

枚举常量

枚举是一个常量整型值的列表,例如:

enum boolean {TRUE, FALSE};

在没有显式说明的情况下,enum 类型中第一个枚举量的值为0,第二个为1,依此递增。如果只指定了部分枚举名的值,那么未指定的枚举名的值将依着最后一个指定值向后递增。

  • 枚举中枚举量的名字必须互不相同。
  • 但不同的名字的枚举量可以具有相同的值。

枚举常量与#define常量

枚举为建立常量值与名字之间的关联提供了一种便利的方式。
相对于#define常量来说,枚举常量的优势在于常量值可以自动生成。
可以声明enum类型的变量,但编译器不检查变量中存储的值是否为该枚举的有效值。
在调试程序可以以符号形式打印出枚举变量的值,这是枚举常量的优势之一。

const限定符

任何变量在声明时都可以用const限定符限定。该限定符表示变量的值不能被修改。对数组而言,const限定符指定数组所有元素的值都不能被修改。
const限定符也可配合函数参数使用,表明该函数不修改传入变量的值。

  • 在C中,以const限定的变量,仍可以通过特殊方法修改变量的值。
  • 在C++中,const具有更加严格的限定性,可以放心当作常量使用。

试图修改const限定符限定的值,是未定义行为(undefined behavior)。