У меня есть эта «ошибочный» код:Разметка памяти в MemSet
int arr[15];
memset(arr, 1, sizeof(arr));
memset
наборы каждый байт до 1, но так как int
, как правило, 4 байта, это не даст желаемый результат. Я знаю, что каждый int
в массиве будет активирован до 0x01010101 = 16843009
. Поскольку у меня слабое (очень) понимание шестнадцатеричных значений и макетов памяти, может кто-нибудь объяснить, почему он получает инициализацию этого шестнадцатеричного значения? Что будет, если я скажу, 4, вместо 1?
Я не понимаю ваш вопрос, потому что у вас уже есть ответ в вашей первой строке.* memset устанавливает каждый байт в 1 = 0x01, так как int обычно 4 байта * 4 байта будет установлен в 0x01010101. Можете ли вы разъяснить свою слабость понимания в макете памяти? Это может быть более полезно. – UmNyobe
Помните, что 'sizeof (arr)' == 60 (байты) не 15 (целые числа). – acraig5075
Да, я знаю, что я назначаю каждый 1 байт с 4-байтовым значением '1', как 4-байтовое значение может быть присвоено одному байту? @ acraig5075 – Jarvis