Оба вызова на memset
верны. И sizeof(las)
(или просто sizeof las
) и sizeof(SecArray)
вернут размер всего массива.
Если вас беспокоит аргумент first , то снова оба сработают. Указатель на весь массив (&las
) или указатель на первый элемент (rad_array
в этом контексте) будет одинаково хорошо работать с memset
.
В целом, что касается использования sizeof
, я бы рекомендовал использовать первый подход, поскольку он не зависит от типа. Хорошая практика программирования - избегать упоминания имен типов в ваших операторах, то есть максимально ограничивайте имена типов объявлениями.
Что касается первого аргумента, в случае массива это вопрос предпочтения, но в целом я бы сказал, что если у вас есть объект типа T
T t;
и вы хотите заполнить его нулями, используя memset
, вы обычно делаете это как
memset(&t, 0, sizeof t);
Я не понимаю, почему массив должен быть исключением из этого правила (особенно, если точная природа типа скрыта за typedef-именем). Вышеуказанный memset(&t, ...
будет работать независимо от того, является ли T
типом массива, типом структуры или любым другим типом. Я не понимаю, почему нужно внезапно отбрасывать &
только потому, что T
является типом массива. Скорее наоборот, я бы оставил это &
, чтобы сохранить код как можно более независимым от типа.
Наконец, в C ++ в обоих случаях лучший способ сделать это - вообще не использовать memset
и просто
A::LRM las[9] = {};
SecArray rad_array = {};
вместо.