【发布时间】:2015-04-24 03:30:33
【问题描述】:
读取包含 4 个字符(包括空终止符)的字符串(声明为数组/指针)是否会比整数值慢(逐字节读取?),读取为字符串,如下所示:
static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s", (char*)val);
【问题讨论】:
标签: c string pointers memory-management
读取包含 4 个字符(包括空终止符)的字符串(声明为数组/指针)是否会比整数值慢(逐字节读取?),读取为字符串,如下所示:
static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s", (char*)val);
【问题讨论】:
标签: c string pointers memory-management
最好的答案是不要这样做!
完整的答案是:如果您的处理器使用 little endian 字节顺序(例如:Intel 架构)并且 int 至少为 32 位,那么您的代码的以下修改版本将产生预期的输出:
static int val = 'C' + '+' * 256 + '+' * 256 * 256;
printf("%s\n", (char*)&val);
在标准输出上输出这一行:
C++
因为0x2b2b43在内存中的字节表示是0x43 0x2b 0x2b 0x00。
val 的地址指向与字符数组"C++" 相同的字节。强制转换不会更改地址,但会阻止编译器警告。
【讨论】: