C语言中的数据表示总体分为变量和常量,其中常量又包括实型、整型和字符型,字符型常量中又细分为普通字符、字符串常量和转义字符,转义字符是这次的主题。见下图数据表示分布图。
转义字符,经常用来表示常见的那些无法显示的控制字符,如
\n——换行、\t——制表符等,由于程序不能用一个一般形式的字符来表示这些特殊字符,就采用这种转义字符来表示。
转义字符的内容在C语言基础里就已经有了详细的讲解,我之所以单独拎出来讲,是因为我碰见了下面的题目:
以下程序段的输出结果是:
char s[]=”\\123456\123456\t”;
printf(“%d\n”,strlen(s));
A.12
B.13
C.17
D.以上都不对
计算这个字符串里的有效字符个数,想当然地,我的答案是16,结果是都没有这个答案…我想的是 ‘\’ ‘\’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘\’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘\t’ , 正确答案是………….给正在看博客的你几秒反应时间,你的答案是什么呢?你确定吗??
好吧,是12个—— ‘\’ ‘1’ ‘2’ ‘3’ ‘4’ ‘5’ ‘6’ ‘\123’ ‘4’ ‘5’ ‘6’ ‘\t’。
第一个’\’:\后面再接一个\,输出的就是\。同理的还有’\”、’\”’、’\?’。
第二个’\123’:\后面可以接1~3个八进制数,来输出与该八进制码对应的字符,同理还有\后面接十六进制数字,输出的自然是与该十六进制码对应的字符。
以下是验证代码:
int main()
{
char a = '\n';// 换行
char b = '\\';// 结果为 \
char c = '\\n';//发生截断,最后的n覆盖了中间的\,结果为n
char d = '\101';//八进制数101相当于十进制数65,对应字符为'A'
char e = '\x41';//十六进制数41相当于十进制数65,对应字符为'A'
printf("%c %c %c %c %c\n",a,b,c,d,e);
return 0;
}
运行结果:
这道题让我发现,知识越学越多,需要注意的细节也越来越多,并不是什么都学了就一定好,一定要注意抠细节。共勉。