funkcja memset w języku c
Studiuję teraz funkcję memset, ale wszystkie przykłady dotyczą tablicy znaków w następujący sposób:
char a[100];
memset(a, 0, 100);
Ustawia każdy element w tej tablicy znaków na 0.
Zastanawiałem się, czy memset może aplikować do int array lub float array?
3 answers
Tak, może mieć zastosowanie do dowolnego bufora pamięci, ale musisz wprowadzić prawidłowy rozmiar bufora pamięci ... memset
traktuje dowolny bufor pamięci jako serię bajtów, więc czy jest char
, int
, float
, double
, itp., nie ma znaczenia. Należy jednak pamiętać, że nie ustawia typów wielobajtowych na określoną wartość niezerową ... na przykład:
int a[100];
memset(a, 1, sizeof(a));
Nie Ustaw każdy element a
na wartość 1 ... zamiast tego ustawia każdy bajt w buforze pamięci zajmowanym przez a
to 1
, co oznacza, że każdy czterobajtowy int
będzie ustawiony na wartość 0x01010101
, która nie jest taka sama jak 0x00000001
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 13:01:26
Dla tablic o rozmiarach statycznych i zmiennej długości, możesz po prostu
<arbitrary-type> foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes
reguła: nigdy hardcode [rozmiary danych].
(to nie działa, jeśli przekazujesz tablice jako argumenty funkcji: zachowanie Sizeof w C )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:57
Może być zastosowana do dowolnej tablicy. 100 na końcu jest wielkością w bajtach, więc liczba całkowita wynosi 4 bajty każda, więc będzie to -
int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance
Rozumiesz? :)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-25 13:32:35