我们来明确C语言中合法常量的几种主要形式:

(图片来源网络,侵删)
-
整型常量
- 十进制: 如
10,123,-50 - 八进制: 以
0开头,如012(等于十进制的10) - 十六进制: 以
0x或0X开头,如0xFF,0x1a - 长整型: 在数字后加
L或l,如100L,0x12L - 无符号长整型: 在数字后加
UL或ul等,如100UL
- 十进制: 如
-
浮点型常量
- 小数形式: 如
14,-0.5,.5, - 科学计数法: 如
14e-2(等于 0.0314),1E5(等于 100000) - 后缀: 可加
F/f(单精度),L/l(双精度长),如23f,23L
- 小数形式: 如
-
字符型常量
- 用单引号括起来的单个字符,如
'A','9', - 转义字符: 如
'\n'(换行),'\t'(制表符),'\''(单引号本身)
- 用单引号括起来的单个字符,如
-
字符串型常量
(图片来源网络,侵删)- 用双引号括起来的字符序列,如
"Hello","123" - 注意: 字符串常量末尾会自动添加一个空字符
'\0',"A"实际上占两个字节。
- 用双引号括起来的字符序列,如
我们来看几个常见的错误选项,并分析它们为什么不合法。
常见的“不能作为合法常量”的选项
假设我们有以下选项,我们来逐一分析:
A. 0128
- 分析: 这个常量以
0开头,表明它是一个八进制数,八进制数中只能包含数字0到7,这里出现了数字8,超出了八进制数字的合法范围。 - 不合法。
B. 0x5G
- 分析: 这个常量以
0x开头,表明它是一个十六进制数,十六进制数中可以包含数字0到9和字母A到F(大小写均可),这里出现了字母G,超出了十六进制字母的合法范围。 - 不合法。
C. 1.5e3.5
- 分析: 这是一个科学计数法表示的浮点数,在
e或E后面的部分(称为指数)必须是整数,不能是小数。5是一个浮点数,因此这种写法是错误的。 - 不合法。
D. 'ab'
- 分析: 这是一个字符型常量,根据C语言标准,字符型常量只能包含一个字符(包括转义字符),用单引号括起来的多个字符(如
'ab')是非法的。 - 不合法。
E. "a"
- 分析: 这是一个字符串型常量,字符串常量可以包含一个或多个字符。
"a"是一个合法的字符串,它包含字符'a'和结尾的空字符'\0'。 - 合法。
根据以上分析,以下几种形式的常量都是不合法的:
- 错误的进制表示: 如
0128(八进制含8),0x5G(十六进制含G)。 - 错误的浮点数格式: 如
5e3.5(指数部分为小数)。 - 错误的字符常量: 如
'ab'(多字符)。
在考试或练习中,最可能出现的正确答案就是类似 0128 或 'ab' 这样的选项。
如果您有具体的选项,请提供,我可以给出更精确的答案。
如果您想测试自己,可以判断以下哪些是合法常量:
01230x1g4561e10'\n''hello'"hello"123L0b1010(注意:这不是标准C语法,但在C++和一些编译器中作为扩展支持)
答案:
- 合法:
0123,456,1e10,'\n',"hello",123L - 不合法:
0x1g,'hello',0b1010(在标准C中)
