Что у вас есть:
memset(dev, 0, (size_t)NUM_DEVICES * sizeof(*dev));
нормально - вы передаете указатель на первый элемент массива и размер массива. Тем не менее, (size_t)
приведение не требуется (sizeof
имеет тип size_t
, так что это вызовет правильное повышение), и я считаю, что dev[0]
яснее, чем *dev
в этом случае:
memset(dev, 0, NUM_DEVICES * sizeof dev[0]);
В качестве альтернативы, вы можете использовать &dev
в качестве адреса. В этом случае, вероятно, будет понятнее использовать sizeof dev
- размер всего массива:
memset(&dev, 0, sizeof dev);
Я говорю, что это понятнее, потому что обычно лучше, чтобы первый параметр был указателем на тип, который является предметом sizeof
в последнем параметре: memset()
должен выглядеть как одна из следующих форм:
memset(p, ..., N * sizeof p[0])
memset(&x, ..., sizeof x)
Обратите внимание, что последний работает только в том случае, если dev
действительно массив - как в этом случае. Если вместо этого у вас есть указатель на первый элемент массива, вам нужно будет использовать первую версию.