【发布时间】:2017-02-14 06:34:59
【问题描述】:
我有这个 “buggy” 代码:
int arr[15];
memset(arr, 1, sizeof(arr));
memset 将每个字节设置为 1,但由于 int 通常为 4 字节,因此它不会给出所需的输出。我知道数组中的每个int 都会被初始化为0x01010101 = 16843009。由于我对十六进制值和内存布局的理解很弱(非常),有人可以解释为什么它会被初始化为那个十六进制值吗?如果我说 4 代替 1 会怎样?
【问题讨论】:
-
我不明白你的问题,因为你在第一行已经有了答案。 memset 将每个字节设置为 1 = 0x01,因为 int 通常为 4 个字节 4 个字节将设置为 0x01010101。你能澄清一下你在内存布局方面的理解弱点吗?这可能更有帮助。
-
请记住
sizeof(arr)== 60(字节)而不是 15(整数)。 -
是的,所以我知道我正在为每个 1 字节分配一个 4 字节值
1,如何将 4 字节值分配给单个字节? @acraig5075 -
你确定你真正的问题不是stackoverflow.com/questions/13477281/…
-
不。不。这就是我写“buggy”的原因。 @UmNyobe