Archiv verlassen und diese Seite im Standarddesign anzeigen : ARRAY mit unbekannter Anzahl deklarieren
Primusio
27-03-2004, 11:10
Hallöchen,
nachdem ich das letzte Problem gelöst habe, hier das nächste.
Wie kann ich ein ARRAY (Pointer) deklarieren, wo ich noch nicht genau weiß, wieviele es werden ?
char *array[2];
das geht ja aber ich weiß wie gesagt ja nicht, ob es nur 2 werden.
MfG
Primusio
Primusio
27-03-2004, 11:34
Dann funzt aber der Befehl "sizeof" ja nicht mehr.
int n_array = sizeof(array) / sizeof(char *);
Bist du dir nur nicht sicher zur Compilezeit wie groß die Anzahl ist,und bleibt die Anzahl dann konstant?
Dann kannst du mit variable length arrays arbeiten
/* gcc -W -Wall -pedantic -std=c99 -ffloat-store main.c */
#include <stdio.h>
int main()
{
int anzahl;
scanf("%d",&anzahl);
char *p[anzahl];
printf("%lu\n",(unsigned long)sizeof p);
}
Wenn sich die Anzahl dynamisch ändern soll,dann kommst du nicht im realloc drumrum (oder du benutzt eine Liste).
Primusio
27-03-2004, 12:14
Das array wird nur einmal im Programm gefüllt und danach nur noch verwendet.
Allerdings muss das Array global deklariert werden.
Berufspenner
28-03-2004, 22:23
Hi@all
Wäre hier die Nutzung der Vektorklasse interessant?
Cu
André
Original geschrieben von Berufspenner
Hi@all
Wäre hier die Nutzung der Vektorklasse interessant?
Cu
André
Oder std::list.
Aber vieleicht will er ja C und nicht C++? Wäre wohl mal angebracht das zu Fragen... (ob C++ auch geht).
Mir war langweilig und so hab ich zwei C-Klassen programmiert. Eine Listenklasse und ein Dynamisches Array. Sind net ganz im Verhalten gleich, das ändere ich vieleicht noch, und ich hab sie noach net getestet 8noch nicht mal kompeliert).
Aber vieleicht helfen dir diese sourcen weiter.
Die Klassen speichern void-pointer (void*) und somit musst du die Rückgabe der jeweiligen get() Methoden selbst noch zu deinen Typ casten.
Und da meine Klassen natürlich nicht wissen können, wie man den Inhalt der void-Pointer Alloziert/Kopiert/Löscht, muss man dem Konstruktor meiner Klassen auch drei Funktionen übergeben, die das tun.
Wenn man aber jeweils NULL statt den Funktionen übergibt, dann wird statt Kopiert einfach der selbe Pointer weiterverwendet, nix beim Löschen getan und ein NULL-Pointer beim Alloziern neuer Elemente zurückgeliefert....
Aber ich schweife mal schonwieder TOTAL vom Thema ab.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.