4字节字符串vs 4字节整数作为字符串重写

时间:2015-02-22 20:51:17

标签: c string pointers memory-management

读取包含4个字符(包括null-terminator,声明为数组/指针)的字符串是否会比整数值慢得多(逐字节?),这样就像这样重写为字符串:

static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s", (char*)val);

1 个答案:

答案 0 :(得分:0)

好的答案是不要这样做!

完整的答案是:如果您的处理器使用小端字节排序(例如:英特尔架构)且int至少为32位,则代码的以下修订版本将产生预期输出:

static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s\n", (char*)&val);

在stdout上输出这一行:

C++

因为内存中0x2b2b43的字节表示为0x43 0x2b 0x2b 0x00。 val的地址指向与字符数组"C++"相同的字节。强制转换不会更改地址,但会阻止编译器警告。