读取包含4个字符(包括null-terminator,声明为数组/指针)的字符串是否会比整数值慢得多(逐字节?),这样就像这样重写为字符串:
static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s", (char*)val);
答案 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++"
相同的字节。强制转换不会更改地址,但会阻止编译器警告。