de-vraag
  • Klausimai
  • Žymos
  • Vartotojai
Pranešimai
Apdovanojimai
Registracija
Užsiregistravę gausite pranešimus apie atsakymus ir komentarus į savo klausimus.
Prisijungti
Jei jau turite paskyrą, prisijunkite ir patikrinkite naujus pranešimus.
Už pridėtus klausimus, atsakymus ir komentarus bus skiriami apdovanojimai.
Daugiau
Šaltinis
Redaguoti
 Matt
Matt
Question

Kaip inicializuoti visus masyvo narius ta pačia verte?

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ę?

931 2008-10-14T13:13:40+00:00 3
 Lundin
Lundin
Redaguotas klausimas priešpietr gegužė 2017 в 6:47
Programavimas
arrays
c
initialization
array-initialize
Popular videos
How to Declare and initialise Arrays in different ways | Java Programming Tutorial
How to Declare and initialise Arrays in different ways | Java Programming Tutorial
prieš 8 metus
Initializing an Array
Initializing an Array
prieš 3 metus
c++ masyvas 1 dalis.
c++ masyvas 1 dalis.
prieš 2 metus
arrays in c programming | declaration and initialization |
arrays in c programming | declaration and initialization |
prieš 4 metus
c++ / Masyvas. Didžiausios mažiausios reikšmės paieška masyve.
c++ / Masyvas. Didžiausios mažiausios reikšmės paieška masyve.
prieš 2 metus
c++ Masyvas. Masyvo elementų šalinimas.
c++ Masyvas. Masyvo elementų šalinimas.
prieš 2 metus
Masyvo aiškinimas
Masyvo aiškinimas
prieš 1 metus
c++ / Masyvas. Naujų elementų įterpimas į masyvą.
c++ / Masyvas. Naujų elementų įterpimas į masyvą.
prieš 2 metus
c++ Struktūra. Pažintis su struktūra. Struktūrų masyvas.
c++ Struktūra. Pažintis su struktūra. Struktūrų masyvas.
prieš 2 metus
c++ masyvo rikiavimas
c++ masyvo rikiavimas
prieš 7 metus
Free Pascal. Masyvai, indeksuoti kintamieji
Free Pascal. Masyvai, indeksuoti kintamieji
prieš 3 metus
Programavimas: Masyvai
Programavimas: Masyvai
prieš 4 metus
C++ vienmačio masyvo praktinis taikymo pavyzdys 1 dalis
C++ vienmačio masyvo praktinis taikymo pavyzdys 1 dalis
prieš 3 metus
c++ Struktūra. Pavyzdinės užduoties sprendimas. Struktūrų masyvas, funkcijos.
c++ Struktūra. Pavyzdinės užduoties sprendimas. Struktūrų masyvas, funkcijos.
prieš 2 metus
c++ pamokos. Struktūrų masyvo aprašymas
c++ pamokos. Struktūrų masyvo aprašymas
prieš 3 metus
C++. Vienmačio masyvo duomenų struktūra 2 dalis
C++. Vienmačio masyvo duomenų struktūra 2 dalis
prieš 3 metus
C++. Vienmačio masyvo duomenų struktūra 1 dalis
C++. Vienmačio masyvo duomenų struktūra 1 dalis
prieš 3 metus
« Ankstesnis
Kitas »
Šis klausimas turi 1 atsakymas atsakymų anglų kalba, norėdami juos perskaityti prisijunkite prie savo paskyros.
Solution / Answer
 aib
aib
popietr spalis 2008 в 1:17
2008-10-14T13:17:23+00:00
Daugiau
Šaltinis
Redaguoti
#8566002

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.)

 Community
Community
Redaguotas atsakymas priešpietr gegužė 2017 в 11:33
1191
0
 plinth
plinth
popietr spalis 2008 в 1:29
2008-10-14T13:29:25+00:00
Daugiau
Šaltinis
Redaguoti
#8566004

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.

13
0
 warren
warren
popietr spalis 2008 в 1:17
2008-10-14T13:17:39+00:00
Daugiau
Šaltinis
Redaguoti
#8566003

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};
6
0
Pridėti klausimą
Kategorijos
Visi
Technologijos
Kultūra / poilsis
Gyvenimas / Menai
Mokslas
Profesionalus
Verslas
Vartotojai
Visi
Naujas
Populiarus
1
Виталий Теслюк
Registruota prieš 7 valandas
2
shokir qochqorov
Registruota prieš 9 valandas
3
Roxana Elizabeth CASTILLO Avalos
Registruota prieš 1 savaitę
4
Hideo Nakagawa
Registruota prieš 1 savaitę
5
Sergiy Tytarenko
Registruota prieš 1 savaitę
BG
CS
DE
EL
ES
FI
FR
HU
ID
IT
JA
KO
LT
NL
PL
PT
RU
SL
TR
ZH
© de-vraag 2022
Šaltinis
stackoverflow.com
pagal licenciją cc by-sa 3.0 nurodant autorystę