Turiu didelį masyvą C (ne C++, jei tai turi reikšmės). Noriu inicializuoti visus narius ta pačia verte. Galėčiau prisiekti, kad kažkada žinojau paprastą būdą, kaip tai padaryti. Mano atveju galėčiau naudoti memset()
, bet ar nėra tokio būdo, kuris būtų integruotas į C sintaksę?
Nebent ši reikšmė yra 0 (tokiu atveju galite praleisti tam tikrą inicializatoriaus dalį). ir atitinkami elementai bus inicializuoti į 0), nėra jokio paprasto būdo.
Tačiau nepamirškite akivaizdaus sprendimo:
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
Elementai su trūkstamomis reikšmėmis bus inicializuoti į 0:
int myArray[10] = { 1, 2 }; // initialize to 1,2,0,0,0...
Taigi visi elementai bus inicializuoti į 0:
int myArray[10] = { 0 }; // all elements 0
C++ kalboje tuščias inicializavimo sąrašas taip pat inicializuos kiekvieną elementą į 0. Tai neleidžiama su C kalba:
int myArray[10] = {}; // all elements 0 in C++
Atminkite, kad objektai su statine saugojimo trukme bus inicializuoti į 0, jei nėra nenurodytas inicializatorius:
static int myArray[10]; // all elements 0
Ir kad "0" nebūtinai reiškia "visų bitų nulį", todėl naudojant aukščiau pateiktą geriau ir lengviau perkeliama nei memset(). (Slankiojo kablelio reikšmės bus inicializuojamos į +0, rodyklės - į nulinę vertę ir t. t.)
Galite naudoti statinį inicializatorių, kaip aprašyta pirmiau, tačiau tai gali būti tikras vargas, kai keičiasi masyvo dydis (kai masyvas padidėja, jei nepridėsite atitinkamų papildomų inicializatorių, gausite šiukšlių).
memset suteikia jums vykdymo metu atliekamo darbo smūgį, tačiau joks tinkamai atliktas kodo dydžio smūgis nėra apsaugotas nuo masyvo dydžio pokyčių. Šį sprendimą naudočiau beveik visais atvejais, kai masyvas būtų didesnis nei, tarkime, kelios dešimtys elementų.
Jei būtų labai svarbu, kad masyvas būtų statiškai deklaruotas, parašyčiau programą, kuri parašytų programą už mane, ir padaryčiau ją surinkimo proceso dalimi.
Inicializuojant 'įprastus' duomenų tipus (pvz., int masyvus), galima naudoti skliaustų užrašą, tačiau jei masyve dar yra vietos, reikšmės po paskutinės bus nulinės:
// put values 1-8, then two zeroes
int list[10] = {1,2,3,4,5,6,7,8};