Minulla on suuri joukko C-kielellä (ei C++, jos sillä on merkitystä). Haluan alustaa kaikki jäsenet samaan arvoon. Voisin vannoa, että tiesin kerran yksinkertaisen tavan tehdä tämä. Voisin käyttää memset()
tapauksessani, mutta eikö tähän ole olemassa C:n syntaksiin sisäänrakennettua tapaa?
Paitsi jos tämä arvo on 0 (jolloin voit jättää jonkin osan aloitusmerkistä pois). ja vastaavat elementit alustetaan arvoon 0), ei ole helppoa tapaa.
Älä kuitenkaan unohda ilmeistä ratkaisua:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
Elementit, joiden arvot puuttuvat, alustetaan arvoon 0:
int myArray[10] = { 1, 2 }; // initialize to 1,2,0,0,0...
Tämä siis alustaa kaikki elementit arvoon 0:
int myArray[10] = { 0 }; // all elements 0
C++:ssa tyhjä alkutilalista alustaa myös jokaisen elementin arvoksi 0. Tämä on ei sallittua C:ssä:
int myArray[10] = {}; // all elements 0 in C++
Muista, että objektit, joilla on staattinen tallennuksen kesto, alustetaan 0:ksi, jos ei ole mitään initiaattoria ei ole määritetty:
static int myArray[10]; // all elements 0
Ja että "0" ei'välttämättä tarkoita "kaikki-bits-nolla", joten edellä olevan käyttäminen on parempi ja siirrettävämpi kuin memset(). (Liukulukuarvot ovat alustetaan arvoon +0, osoittimet nolla-arvoon jne.)
Voit tehdä koko staattisen alustajan jutun kuten edellä on kuvattu, mutta se voi olla todellinen harmi, kun array-koko muuttuu (kun array kasvaa, jos et lisää asianmukaisia ylimääräisiä alustajia, saat roskaa).
memset antaa sinulle ajonaikaisen osuman työn tekemisestä, mutta mikään oikein tehty koodin kokohitti ei ole immuuni array-koon muutoksille. Käyttäisin tätä ratkaisua lähes kaikissa tapauksissa, joissa array on suurempi kuin esimerkiksi muutama kymmenen elementtiä.
Jos olisi todella tärkeää, että array olisi staattisesti ilmoitettu, kirjoittaisin ohjelman, joka kirjoittaisi ohjelman puolestani ja tekisi siitä osan rakentamisprosessia.
'normaalien' tietotyyppien (kuten int-matriisien) alustamiseen voit käyttää sulkujen merkintätapaa, mutta se nollaa arvot viimeisen jälkeen, jos matriisissa on vielä tilaa:
// put values 1-8, then two zeroes
int list[10] = {1,2,3,4,5,6,7,8};