So habe ich mir das dann auch gedacht, dass ich den Speicher allokiere.
Aber gibt es auch eine andere Variante? Ich verwende Pelles C und mir wurde gesagt, dass dieser „dynamische Arrays“ kann, dies aber C nicht können sollte.
"In computer science, a dynamic array, growable array, resizable array, dynamic table, or array list is an array data structure that can be resized and allows elements to be added or removed. It is supplied with standard libraries in many modern mainstream programming languages.
A dynamic array is not the same thing as a dynamically-allocated array, which is a fixed-size array whose size is fixed when the array is allocated; for more information of this type of array, see array."
(http://en.wikipedia.org/wiki/Dynamic_array)
In computer science, a dynamic array, growable array,
resizable array, dynamic
Das meint Container, die, je nach Funktions-Umfang, mit einem gewissen Aufwand auch für C gemacht werden können. Das wird so getrickst, dass sich ein Objekt immer die Adresse des nächsten merkt, so kann man sich der Reihe nach „durch hangeln“, eine „verkettete Liste“ nennt man sowas. Da schreibst Du, solange Du willst.
#include
int main(int argc, char \*argv[]) {
int anzahl;
printf("Anzahl: ");
scanf("%d", &anzahl);
int a[anzahl];
return 0;
}
Die Frage ist ob a ein dynam. Array ist, da die Länge des Arrays erst zur Laufzeit eingelesen wird und nicht schon fest bspw. da steht int a[100];
Dürfte das in C überhaupt so gehen? Bzw. ist das abhängig von den Varianten C90/C95/C99?
Die Frage ist ob a ein dynam. Array ist, da die Länge des
Arrays erst zur Laufzeit eingelesen wird und nicht schon fest
bspw. da steht int a[100];
Dürfte das in C überhaupt so gehen? Bzw. ist das abhängig von
den Varianten C90/C95/C99?
ein block-scope(!)-Konstrukt vom Typ
array[n] ist
also ab C99 gegeben, einige Compiler (z.B. gcc)
unterstützen dies aber bereits als Extension.
Ah, das erklärt schon einiges. Aber block-scope-Konstrukt? Das ist doch wenn in einer Funktion nur lokal etwas gilt, nach dem Verlassen der Funktion wird der Speicher wieder freigegeben. Aber was hat das mit diesem Zusammenhang zu tun?
Das bedeutet ich bräuchte eine ältere Variante C95 oder C90, so dass eine Warnung geworfen wird? (Benötigt für Übungszwecke, dass man nicht verführt wird das zu nehmen, anstatt malloc).
Hi PHANTOM
Meines Wissens nach wird dir ein C-Compiler bei dem Code oben als erstes meckern, das a eine konstante Größe braucht.
Ich glaube nicht, das es in C anders als mit malloc, realloc, etc. möglich ist einem Array eine dynamische Größe zu geben.
Gruß
re-G
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi PHANTOM
Meines Wissens nach wird dir ein C-Compiler bei dem Code oben
als erstes meckern, das a eine konstante Größe braucht.
Ich glaube nicht, das es in C anders als mit malloc, realloc,
etc. möglich ist einem Array eine dynamische Größe zu geben.
Gruß
re-G
Hallo!
Es geht, jedoch nur mit der C99-Variante, nicht mit ANSI-C.