Kezdőoldal » Számítástechnika » Programozás » Igaz az, hogy tömb létrehozásá...

Igaz az, hogy tömb létrehozásánál a tömb méretét nem írhatjuk változóval?

Figyelt kérdés

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.



2017. dec. 4. 06:15
 1/4 anonim ***** válasza:
100%

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

2017. dec. 4. 09:41
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
100%

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

[link]


"Optional features:

....

Variable length arrays"

[link]


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

[link]

2017. dec. 4. 11:13
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
Rosszul hallottad/hallották. Ez inkább arra vonatkozik, hogy futásidőben nem variálhatod a statikus tömb méretét. Pl. mi van akkor, ha létrehozol egy 5 méretű tömböt, aztán gondolsz egyet és később megváltoztatod 3 méretűre? Ez így nem működik, erre valóak a dinamikus méretű tömbök.
2017. dec. 4. 15:27
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

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:

[link]

Realloc:

[link]


c++:

[link]

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.

2017. dec. 4. 20:03
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!