V jazyku C sa funkcia memset () používa na nastavenie jednobajtovej hodnoty na byte bloku pamäte po bajtech. Táto funkcia je užitočná na inicializáciu bloku pamäťového bloku po bajte o konkrétnu hodnotu. V tomto článku uvidíme podrobne, ako je možné túto funkciu využiť. Takže poďme na to.
Hlavičkový súbor:
1 | struna.h |
Syntax:
1 | void * memset (void * str, int ch, size_t n) |
Táto funkcia nastavuje prvý n bajtov bloku pamäte, na ktoré ukazuje str od ch.
Argumenty:
Funkcia má 3 argumenty:
- str: Toto je ukazovateľ miesta v pamäti, kde bude nastavená pamäť. Toto je ukazovateľ neplatnosti, takže môžeme nastaviť akýkoľvek typ pamäťového bloku, ale pamäť sa nastaví po bajtoch.
- ch: Toto je hodnota, ktorá sa má skopírovať do pamäťového bloku. Toto je celočíselná hodnota, ale pred kopírovaním sa prevedie na nepodpísaný znak.
- n: Toto je počet bajtov v bloku pamäte, ktorý je nastavený.
Návratové hodnoty:
memset () vráti prvú adresu bloku pamäte, odkiaľ začne nastavovať hodnotu.
Príklady:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Príklad1.c #include #include int main () char str [30] = "ABCD EFGH"; printf ("Pred memset =>% s", str); memset (str, 'x', 3); printf ("\ nPo memset =>% s \ n", str); návrat 0; |
V príklade 1.c, deklarovali sme jedno pole znakov veľkosti 30. Potom sme ho inicializovali reťazcom „ABCD EFGH.„Vo funkcii memset sme odovzdali 3 argumenty str, 'x' a 3. Takže pamäťový blok označený str bude resetovaný na prvé 3 znaky o 'x.„Po vytvorení sady pamätí, keď vytlačíme pamäť, dostaneme„ xxxD EFGH.“
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Príklad2.c #include #include int main () char str [30] = "ABCD EFGH"; printf ("Pred memset =>% s", str); memset (str + 4, 'x', 3); printf ("\ nPo memset =>% s \ n", str); návrat 0; |
V príklade 2.c, odovzdali sme str + 4 funkcii memset. Takže to resetovalo pamäť po 4. umiestnení str. Po vytvorení sady pamätí, keď tlačíme pamäť, dostaneme „ABCDxxxGH.“
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Príklad3.c #include #include int main () int arr [5], i; memset (arr, 10,5 * sizeof (arr [0])); printf ("\ narr Prvky => \ n"); pre (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); návrat 0; |
V príklade 3.c, deklarovali sme celočíselné pole veľkosti 5 a pokúšame sa ho inicializovať o 10. Ale z výstupu sme videli, že pole nie je inicializované číslom 10; namiesto toho sme dostali hodnotu „168430090“. Je to preto, že celočíselná hodnota je väčšia ako jeden bajt a funkcia memset pred skopírovaním prevedie hodnotu na nepodpísaný znak. Teraz uvidíme, ako dostaneme hodnotu „168430090“.
Binárne zastúpenie 10 je 00000000 00000000 00000000 00001010.
Keď sa celé číslo prevedie na nepodpísaný znak, bude sa brať do úvahy nižší 1 bajt. Keď sa teda 10 prevedie na nepodpísaný znak, je to binárna reprezentácia 00001010.
Funkcia memset () nastavuje umiestnenie pamäte po bajtoch. Celkovo teda budú 4 bajty: 00001010 00001010 00001010 00001010.
Desatinná hodnota binárneho vyjadrenia 4 bajtov je 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Príklad4.c #include #include int main () int arr [5], i; memset (arr, 0,5 * sizeof (arr [0])); printf ("\ narr Prvky => \ n"); pre (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); návrat 0; |
V príklade 4.c, celé číslo poľa sme inicializovali o 0. Všetky bity binárnej reprezentácie 0 sú 0. Pole je teda inicializované číslom 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Príklad5.c #include #include int main () int arr [5], i; memset (arr, -1,5 * sizeof (arr [0])); printf ("\ narr Prvky => \ n"); pre (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); návrat 0; |
V príklade 5.c, celé číslo poľa sme inicializovali o 0. Všetky bity binárnej reprezentácie -1 sú 1. Pole je teda inicializované hodnotou -1.
Záver:
V tomto článku sme videli pomocou funkcie memset, ako môžeme efektívne inicializovať alebo nastaviť hodnotu pamäťového bloku. Môžeme nastaviť ľubovoľný znak a 0 alebo -1 ako celočíselnú hodnotu do pamäťového bloku. Funkcia Memset rýchlejšie nastaví veľkú časť súvislej pamäte v porovnaní s jednoduchým nastavením polohy pomocou slučky.