β

C/C++中’ab’是个什么鬼?

DevFighter 73 阅读
C++

在技术群里有人讨论遇到面试题:将字符串中的’/t’转换为4个空格。可能题目的本意是将”\t”转换为空格,但输入错误。但大家讨论开问’/t’是个什么东西,有热心的还真从msdn上问到了,这个叫”constant value”。
本文网址:http://devfighter.com/blog/?p=69
写了下面一段代码看看这个究竟是怎么用的:

printf("%x, %x, %x, %x\n", 'a', 'ab', 'abc', 'abcd');
printf("%d, %d, %d, %d\n", sizeof('a'), sizeof('ab'), sizeof('abc'), sizeof('abcd'));

输出为:

, 6162, 616263, 61626364
, 4, 4, 4

原来除了含一个字符外,还可以含2-4个字符(此时size为4),然后直接按顺序转换存到内存中,可直接当成int进行加减乘除运算,看似好美好的东西。

那非显示字符能否用十六进制表示么?继续测试

printf("%x\n", 'abcd');             //输出:61626364
printf("%x\n", 'abc\x64');          //输出:61626364
printf("%x\n", 'ab\x63\x64');       //输出:64616263
printf("%x\n", 'a\x62\x63\x64');    //输出:64636162
printf("%x\n", '\x61\x62\x63\x64'); //输出:64636261
printf("%x\n", '\x61 \x63\x64');    //输出:64636120
printf("%x\n", '\x61\x62 \x64');    //输出:64206261

直接晕了,这个顺序怎么能这样,对我来说这货果然还是个鬼。。。

补充:在csdn上问了大牛们,确实有这么个东西:字符常量,但多字符常量(2-4个字符)的实现是没有标准的,具体实现依赖编译器,不具备可移植性,不建议使用。
还有一个宽字符常量,用法为wchat_t z = L’ab’,这个具有移植性,本人未测试。

C++
作者:DevFighter
学习,不能停,探索,不能停
原文地址:C/C++中’ab’是个什么鬼?, 感谢原作者分享。

发表评论