manpage говорит о memset:
#include <string.h> void *memset(void *s, int c, size_t n)Функция
memset()заполняет первуюnбайты области памяти, на которую указываетs, с константным байтомc.
Очевидно, что memset не может использоваться для инициализации массива int, как показано ниже:
int a[10];
memset(a, 1, sizeof(a));
это потому, что int представляется 4 байтами (скажем), и невозможно получить желаемое значение для целых чисел в массиве a.
Но я часто вижу, что программисты используют memset для установки элементов массива int либо 0, либо -1.
int a[10];
int b[10];
memset(a, 0, sizeof(a));
memset(b, -1, sizeof(b));
В соответствии с моим пониманием инициализация с помощью integer 0 является ОК, потому что 0 может быть представлена в 1 байт (может быть, я ошибаюсь в этом контексте). Но как можно инициализировать b с помощью -1 (значение 4 байта)?