Igaz az, hogy tömb létrehozásánál a tömb méretét nem írhatjuk változóval?
C nyelvről van szó (meg elvileg általánosságban is igaz). A lényeg, hogy statikus tömböket hozunk létre, mondjuk azt mondom, hogy size=5 (vagy bekérem), és létrehozom, hogy int array[size], és lesz egy 5 elemű tömböm. Többektől hallottam, hogy ezt nem szabad, ezért van helyette a dinamikus tömb, meg C-ben a define size valami.
Másik lehetséges megoldása a dolognak, mivel ezt 'nem szabad' (?), hogy meghatározzuk, maximum mekkora lehet a tömb, megkérdezzük a felhasználót, hogy ő mekkorát szeretne ezen belül. Pl tomb[20], felhasználó beírja, hogy meret=10, és innentől a különböző ciklusokban, ahol a tömböt feltöltjük, egyéb módon foglalkozunk vele, i<meret-ig visszük, és úgy kezeljük, mintha egy 10 elemű tömb lenne.
A kérdésem csak azért érdekes, mert nekem az ide (codeblocks) pl. mindig elfogadta eddig azt is, ha változóval adtam meg a tömb méretét.
Általánosságban semmiképp sem igaz, számtalan nyelv tud statikus tömböt változóból inicializálni.
C-ben igaz is, meg nem is igaz.
A szabvány szerint csak fordítás időben ismert mérettel inicializálható tömb, tehát, ha valahova szabványnak megfelelő kódot akarsz írni, akkor csak ilyet írhatsz.
Ettől függetlenül számtalan fordító nagyban kibővíti a nyelv szabványát és használhatsz benne futási időben ismert méretet is.
"C nyelvről van szó"
C99-ben és C11-ben is "megengedett" a VLA:
"C99 introduced several new features, many of which had already been implemented as extensions in several compilers:
...
variable-length arrays (although subsequently relegated in C11 to a conditional feature which implementations are not required to support)"
"Optional features:
....
Variable length arrays"
C++-ban nem:
"Several additions of C99 are not supported in the current C++ standard or conflicted with C++ features, such as variable-length arrays, native complex number types, compound literals, and designated initializers. "
C: malloc és realloc
malloc-al tudsz egy tömböt létrehozni futási időben
int size = 100;
int* array = (int*) malloc(sizeof(int)*size);;
//csinálunk egy nagyobbat
size*=2;
array = (int*) realloc(array, sizeof(int)*size);
Malloc:
Realloc:
c++:
Majdnem olyan mint c ben csak itt nem függvény hanem operátor segítségével tudsz tömböt foglalni.
int* array = new int[size];
Illetve nincs realloc hanem neked kell átmásolni az elemeket az új tömbbe.
De c++ ban érdemes generikus STL tárolókat használni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!