C: ssä memset () -toimintoa käytetään asettamaan yksitavuinen arvo muistilohkotavulle tavun mukaan. Tämä toiminto on hyödyllinen alustettaessa muistilohkotavu tavuina tietyllä arvolla. Tässä artikkelissa näemme yksityiskohtaisesti, kuinka tätä toimintoa voidaan käyttää. Joten, aloitetaan.
Otsikkotiedosto:
1 | merkkijono.h |
Syntaksi:
1 | void * memset (void * str, int ch, size_t n) |
Tämä toiminto asettaa ensimmäisen n tavun osoittama muistilohko str mennessä ch.
Väitteet:
Funktiossa on 3 argumenttia:
- str: Tämä on muistipaikan osoitin, johon muisti asetetaan. Tämä on tyhjä osoitin, joten voimme asettaa minkä tahansa tyyppisen muistilohkon, mutta muisti asetetaan tavu tavuna.
- ch: Tämä on arvo, joka on kopioitava muistilohkoon. Tämä on kokonaislukuarvo, mutta se muunnetaan allekirjoittamattomaksi merkiksi ennen kopiointia.
- n: Tämä on asetettujen muistilohkojen tavujen määrä.
Palautusarvot:
muistikirja () palauttaa muistilohkon ensimmäisen osoitteen, josta se alkaa asettaa arvoa.
Esimerkkejä:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Esimerkki 1.c #sisältää #sisältää int main () char str [30] = "ABCD EFGH"; printf ("Ennen verkkokokonaisuutta =>% s", str); muistikirja (str, 'x', 3); printf ("\ nMemetsetin jälkeen =>% s \ n", str); paluu 0; |
Esimerkissä 1.c, olemme ilmoittaneet yhden merkkiryhmän, jonka koko on 30. Sitten olemme alustaneet sen merkkijonolla “ABCD EFGH.”Memset-funktiossa olemme välittäneet 3 argumenttia str, 'x' ja 3. Joten str: n osoittama muistilohko nollaa ensimmäiset 3 merkkiä x: llä.'Kun muistia on tulostettu muistin jälkeen, saamme “xxxD EFGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Esimerkki 2.c #sisältää #sisältää int main () char str [30] = "ABCD EFGH"; printf ("Ennen verkkokokonaisuutta =>% s", str); muistisarja (str + 4, 'x', 3); printf ("\ nMemetsetin jälkeen =>% s \ n", str); paluu 0; |
Esimerkissä 2.c, olemme välittäneet str + 4: n memset-funktiolle. Joten se nollaa muistin str: n 4. sijainnin jälkeen. Kun muistitulos on muistin tulostus, saamme “ABCDxxxGH.”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Esimerkki 3.c #sisältää #sisältää int main () int arr [5], i; memset (arr, 10,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); paluu 0; |
Esimerkissä 3.c, olemme ilmoittaneet kokonaislukumatriisin, jonka koko on 5, ja yritämme alustaa sen 10: llä. Mutta tuotoksesta olemme nähneet, että taulukkoa ei alusteta 10: llä; sen sijaan olemme saaneet arvon "168430090". Tämä johtuu siitä, että kokonaisluku on suurempi kuin yksi tavu, ja memset-funktio muuntaa arvon allekirjoittamattomaksi merkiksi ennen kopiointia. Näemme nyt, kuinka saamme arvon "168430090".
10: n binaarinen esitys on 00000000 00000000 00000000 00001010.
Kun kokonaisluku muunnetaan allekirjoittamattomaksi merkiksi, otetaan huomioon alempi 1 tavu. Joten, kun 10 muunnetaan allekirjoittamattomaksi chariksi, se on binaariesitys 00001010.
memset () -toiminto asettaa muistipaikkatavun tavuittain. Joten yhteensä 4 tavua on: 00001010 00001010 00001010 00001010.
4 tavun binaariesityksen desimaaliarvo on 168430090.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Esimerkki 4.c #sisältää #sisältää int main () int arr [5], i; memset (arr, 0,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); paluu 0; |
Esimerkissä 4.c, olemme alustaneet kokonaisluvun taulukon 0: lla. Kaikki binaarisen esityksen 0 bitit ovat 0. Joten taulukko alustetaan 0: lla.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // Esimerkki 5.c #sisältää #sisältää int main () int arr [5], i; muistisarja (arr, -1,5 * sizeof (arr [0])); printf ("\ narr Elements => \ n"); (i = 0; i<5;i++) printf ("% d \ t", arr [i]); printf ("\ n"); paluu 0; |
Esimerkissä 5.c, olemme alustaneet kokonaislukumatriisin 0: lla. -1-binaariesityksen kaikki bitit ovat 1. Joten taulukko alustetaan -1: llä.
Päätelmä:
Tässä artikkelissa olemme nähneet memset-toiminnon avulla, kuinka voimme alustaa tai asettaa muistilohkon arvon tehokkaasti. Voimme asettaa minkä tahansa merkin ja 0 tai -1 kokonaislukuarvoksi muistilohkolle. Memset-toiminto on nopeampi asettaa suuri osa vierekkäistä muistia verrattuna yksinkertaiseen sijainnin asettamiseen silmukalla.