В странице справочника говорится о memset
:
#include
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));
Согласно моему пониманию, инициализирующему с целым числом 0
в порядке потому что 0
может быть представлен в 1 байте (может быть, я неправ в этом контексте). Но как возможно инициализировать b
с -1
(4-байтовое значение)?
0
, его значение также 0 . Однако, если все биты 1
, значение -1 .
, Когда мы пишем int a[2]
, 4x2 , байты памяти выделяются, который содержит случайные биты / биты мусора -
00110000 00100101 11100011 11110010 11110101 10001001 00111000 00010001
Затем мы пишем memset(a, 0, sizeof(a))
. Теперь, memset()
не различает int
& char
. Это работает байт байтом . И однобайтовое представление [1 139] 0 00000000
. Так, мы добираемся -
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Поэтому и a[0]
и a[1]
, инициализируются с [1 140] 0 .
Теперь, позволяет, см. memset(a, -1, sizeof(a))
: Один байт для [1 141]-1 11111111
. И, мы добираемся -
11111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
Здесь, и a[0]
и a[1]
будет иметь значение -1 .
Однако для [1 118]: 1 в байте 00000001
-
00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001
Так, значение будет - 16843009 .