Разрешить запуск функции только n раз с функцией-оберткой

hrnt прав насчет причины пробела: &b имеет тип char* и поэтому печатается как строка до первого нулевого байта. Предположительно b равно 0. Если вы установите b на, скажем, «A», тогда вы должны ожидать, что распечатка будет строкой, начинающейся с «A» и продолжающейся с мусором до следующего нулевого байта. Используйте static_cast<void*>(&b) для печати в качестве адреса.

Для вашего второго вопроса &c - &i равно 8, поскольку размер int равен 4, символ равен 1, а строка начинается с следующая 8-байтная граница (вы, вероятно, на 64-битной системе). Каждый тип имеет определенное выравнивание, а C ++ выравнивает поля в структуре в соответствии с ним, соответственно добавляя дополнение. (Правило большого пальца состоит в том, что примитивное поле размера N выровнено с кратным N.) В частности, после b вы можете добавить еще 3 поля char, не затрагивая адрес &c.

5
задан Ming Huang 23 February 2019 в 16:21
поделиться