Или
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
необходимо.