In C ein unendliches Array?

3 Antworten

Das ist keine Array, sondern nur ein Pointer in dem man die Anfangsadresse des (noch nicht existierenden) Arrays speichern kann.

Das Array erzeugt man mit

array = malloc(100) // 100 Bytes
array = new char [100]

Die zweite Variante funktioniert nur in C++

Man muss den Speicher wieder freigeben, wenn man ihn nicht mehr braucht:

free(array) // für malloc
delete [] array // für new (C++)

tunik123  28.01.2023, 12:40

Noch ein Hinweis: Wenn der Compiler bei malloc ein Problem mit den Pointertypen sieht, hilft ein Cast-Operator:

array = (char *)malloc(100)
0
ulidecktauf 
Fragesteller
 28.01.2023, 12:48

ok vielen dank, noch eine kurze frage:

was ist der unterschied zwischen

array = malloc(100)

und

array = malloc(sizeof(char)*100)

da ja eig ein character ein byte groß ist, müsste das ja das bezhüglich der Speichereffizienz das gleiche sein.

0
tunik123  28.01.2023, 12:52
@ulidecktauf

Das ist das gleiche. Die Variante mit dem sizeof(char) ist sogar konsequenter, denn wenn man z.B. ein Array von int-Werten braucht, muss man ja auch mit sizeof(int) multiplizieren.

1

Mit Unendlich meinst du wahrscheinlich "Dynamisch".

Ein String ist Dynamisch (also in cpp auf jeden fall);

Dynamisch heißt das er sich auf das anpasst was drinne ist.

Und um deine Frage zu beantworten:

ein char *array ist keine Variable, es it ein pointer.

Woher ich das weiß:eigene Erfahrung – Ich bin schon länger auf diesen Gebieten unterwegs.

da das nur ein pointer auf die anfangsadresse ist , muss es keine begrenzung geben .

du sagst quasi nur , da startet diese struktur .

du solltest ggf selber dafür sorgen das ein ende erkannt wird, z.b. wie bei strings wo das \0 dann das ende zeichen ist .