Zum Inhalt springen

Konstanten den Wert einer Variablen übergeben für Feldgröße?


Empfohlene Beiträge

Geschrieben

Hi

Ich meine man konnte irgendwie einer Konstanten den Wert einer Variablen übergeben, so dass man damit die Feldgrösse erst bei Initialisierung des Feldes mit dieser Konstanten festsetzen konnte.

Weiss vielleicht jemand wie das geht, oder wie man das sonst machen könnte?

Eine Variable als Feldgrösse geht ja leider nicht - wohl aber eine Konstante als Feldgrösse...

Habe leider bisher nichts dazu gefunden. :(

Geschrieben

Hi,

Meines Wissens kannst du einer Konstanten keinen Wert einer Variablen zuweisen.

( Daher ja auch der Name Konstante )

Bei statischen Feldern kann die Feldgrösse nicht mit Variablen angegeben werden, deshalb solltest du in deinem Fall vielleicht ein dynamisches Feld allokieren ?

z.B. int *Feld = new int[200]

Der Speicher muss dann allerdings von Hand wieder freigegeben werden ( delete [] Feld ), bei einem Statischen Array wird das automatisch erledigt.

Aber einer Konstanten einen Variablen Wert zu weisen geht definitiv nicht.

mfg

dOwNs3t.

Geschrieben

Hi

Also die Feldgrösse soll nur einmal festgelegt werden und danach auch nicht mehr verändert werden. Von daher sozusagen nur den Wert der variablen der aus ner Stringlänge kommt einmal übernehmen, damit das Feld nicht unnötig gross ist. Das müsste doch eigentlich gehen, oder?

Geschrieben

Für die Größe eines Arrays musst Du eine Konstante oder ein numerisches Literal verwenden, also nichts, was Du zur Laufzeit noch verändern könntest.

Wenn es Dir nur darum geht, den Speicher nicht wieder freigeben zu müssen, kannst Du alloca verwenden, also statt

int array[ groesse ];
einfach das hier:
int* array = (int*) alloca( groesse * sizeof( int ) );

Geschrieben

Da ich alloca nicht kannte, mußte ich eben mal ein wenig suchen. Ich habe böserweise aus der Tatsache, daß ich es nicht kenne, geschlossen, daß es kein Standard sein kann. Leider ist es auch so und schon allein deswegen sollte man alloca nicht verwenden. Mein Entwicklungsumgebung hat allerdings noch einen Grund geliefert, warum man es nicht verwenden sollte:

"Der Einsatz von alloca sollte, wenn möglich vermieden werden. Die Funktion sollte auf keinen Fall im try-Block eines C++ Programms verwendet werden. Wenn eine Exception ausgelöst wird, werden alle Werte, die von alloca auf dem Stack abgelegt werden, zerstört."

Sehr unschön... Wenn man sich aber nicht um das ganze freigeben kümmern möchte hätte man immer noch das Konzept des auto_ptr's zur Verfügung.

HTH

Jan

Geschrieben
Original geschrieben von Orffi

Da ich alloca nicht kannte, mußte ich eben mal ein wenig suchen. Ich habe böserweise aus der Tatsache, daß ich es nicht kenne, geschlossen, daß es kein Standard sein kann. Leider ist es auch so und schon allein deswegen sollte man alloca nicht verwenden.

Danke für den Hinweis. Wie finde ich eigentlich heraus, ob etwas Teil des Standards ist?

Wenn eine Exception ausgelöst wird, werden alle Werte, die von alloca auf dem Stack abgelegt werden, zerstört."
Passiert das nicht mit allen Variablen auf dem Stack?
Geschrieben
Danke für den Hinweis. Wie finde ich eigentlich heraus, ob etwas Teil des Standards ist?

Gibt verschiedene Möglichkeiten. Ich gehe zuerst nach meinem Gefühl. Wenn ich glaube, daß es nicht Standard ist gehe ich auf die Suche. Zur schnellen Suche schaue ich in der Borland Hilfe nach, dort gibt es ein Link, der anzeigt, ob die Funktion zum Beispiel ANSI C, ISO C++ oder windowsspezifisch ist. Aber da ich auch Borland nicht besonders traue, habe ich mir den C++-Standard gekauft. Dort schaue ich hauptsächlich nach. Den Standard kann man als PDF-Datei kaufen (18 US-D). Der Preis ist in Ordnung, wenn man es allerdings als Buch haben möchte, hört der Spaß auf, das ist zu teuer. Kostenlos gibt es den C++ Draft: ftp://ftp.research.att.com/dist/c++std/WP/CD2 Sonst vertaue ich noch dem Buch von Stroustrup.

Passiert das nicht mit allen Variablen auf dem Stack?

Ich denke schon.

HTH

Jan

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...