Функция memset на языке c
Теперь я изучаю функцию memset, но все примеры относятся к массиву char следующим образом:
char a[100];
memset(a, 0, 100);
он установит каждый элемент в этом массиве char равным 0.
Я задавался вопросом, может ли memset применяться к массиву int или float?
Ответы
Ответ 1
Да, он может применяться к любому буферу памяти, но вы должны ввести правильный размер буфера памяти... memset
обрабатывает любой буфер памяти как ряд байтов, поэтому, будь то char
, int
, float
, double
и т.д., не имеет большого значения. Имейте в виду, что он не будет устанавливать многобайтовые типы для определенного ненулевого значения... например:
int a[100];
memset(a, 1, sizeof(a));
будет не задавать каждому члену a
значение 1... скорее, он будет устанавливать каждый байт в буфере памяти, взятый с a
до 1
, что означает, что каждый четырехбайтный int
будет установлен в значение 0x01010101
, которое не совпадает с 0x00000001
Ответ 2
Он может применяться к любому массиву. 100 в конце - это размер в байтах, поэтому целое число будет равно 4 байтам, поэтому это будет -
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
Получить?:)
Ответ 3
Для массивов с установленными размерами и переменной длины вы можете просто
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
Правило большого пальца: Никогда не печатайте [данные].
(Это не работает, если вы передаете массивы в качестве аргументов функции: Поведение параметра Sizeof в C)