Либо
memset(&dev_sys, 0, sizeof dev_sys);
или
memset(dev_sys, 0, NUM_DEVICES * sizeof(struct device_sys));
Или, если вы предпочитаете
memset(dev_sys, 0, NUM_DEVICES * sizeof *dev_sys);
но не то, что у вас есть в вашем первоначальном варианте.
Обратите внимание, что в вашем конкретном случае во всех вариантах вы можете использовать либо &dev_sys
, либо dev_sys
в качестве первого аргумента. Эффект будет таким же. Тем не менее, &dev_sys
более уместен в первом варианте, так как если следует идиома memset(ptr-to-object, object-size)
. Во втором и третьем вариантах более целесообразно использовать dev_sys
(или &dev_sys[0]
), поскольку это следует за иконой memset(ptr-to-first-element, number-of-elements * element-size)
.
P.S. Конечно, вместо того, чтобы использовать все, что хак memset
фокусов, в вашем конкретном случае, вы должны только объявили ваш массив с инициализатором
struct device_sys dev_sys[NUM_DEVICES] = { 0 };
Нет memset
необходимости.
Если вы ввели typedef struct device_sys в dev_sys, вы можете сохранить упомянутый memset. typedef struct device_sys dev_sys; memset (dev_sys, 0, NUM_DEVICES * sizeof (dev_sys)); –