c++字符常量合法性判定两个题

如题所述

第一题
A.078不合法,试图表示8进制中不存在的数字8,故而报错
B.5L合法,表示长整型5
C.9e7.5不合法,e后必须为整数
D.'a1',编译器会生成一个警告指出这是一个多字符的字符常量。你可以认为它合法,也可以认为不合法。
第二题
A.错误,应该为'\101'
B.错误,应该为'\x41'

C.正确,为ASCII码值
D.错误,这是字符串"A"。追问

为什么第十题A选项应为‘\101’呢,八进制的话不需要区别吗?例如0101

并且C选项十六进制,前面不应该是ox吗?为什么\x41就行了?

追答

转义序列\ddd就表示八进制数,最多三位,前面无需加0。\0101已经超出了三位限制,会被解释为字符'\010'+字符'1',结果和第一题D选项相同。

追问

那编译器怎么知道是八进制呢?

并且十六进制可以只加x吗?

追答

    我已经说了,\ddd的形式就代表八进制ASCII码。这是C语言标准。

    不是“可以只加x”,而是必须表示成\xhh的形式,代表十六进制ASCII码。这也是C语言标准。如果写成\0x41会被解释为字符'\0'+字符'x'+字符'4'+字符'1',结果同第一题D选项。

追问

谢谢大佬😄😄

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-13
C++允许使用一种特殊形式的字符常量,就是以“\“开头的字符序列,'\x89'就是十六进制代表的字符,\0是空字符(就是什么都不做,不是空格字符的意思哦),'\092'就是八进制代表的字符,但'\092'是错的。望采纳。追问

请问能不能逐项解释一下?我刚学c++不太懂

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网