Rausfinden wie groß das Array bei übergabe an Funktion?
-
dann übergib die Länge als Parameter mit. Wobei ich trotzdem nicht verstehe, warum für ein Programm auf einer Bootdisk keine STL verwenden kann... aber ich muß auch nicht alles verstehen.
Jedenfalls kann eine Lösung mit sizeof nicht funktionieren, weil sizeof zur Compile-Zeit ausgewertet wird. Das heißt, die Größe des Feldes müßte bereits dann feststehen. Tut sie aber bei einer Funktion, die eines übergeben krieg nicht. Und erst recht nicht, wenn das Feld erst zur Laufzeit angelegt wird.
MfG Jester
-
mist: kurz es gibt KEINE andere lösung als die mit nem 2. Parameter wo man die größe angibt??
-
Du kannst deine eigene Array-Klasse schreiben. Dann nimm aber lieber doch gleich std::vector.
Wenn du keine STL verwenden kannst, dann ist das IMO auch kein C++. Man sollte Standard-C Arrays wenn es geht, nicht verwenden.
-
Oder schau mal bei boost vorbei. Da gibts auch ein paar nette Sachen.
vector bringt halt schon ne ganze Menge Zusatzlast mit. Speicher ist dynamisch, kann also wachsen. Wenn das aber unnötig ist, dann ist es unter umständen verschwendete Energie.
boost::array wäre in diesem Fall wohl eine Alternative.MfG Jester
-
@isak: du kannst auch einfach nen \0 nach dem letzten element einfügen, so wie bei char arrays auch(wenn sie als string genutzt werden).
dann musste dir nur noch ne funtion schreiben die dir die länge zurückgibt..
allerdings ist die lösung mit einem zweiten parameter oder einer array-klasse auf jeden fall weniger rechenaufwendig.
-
Wo kann man gleich nochmal nachlesen, was von boost jetzt in die STL übernommen werden soll?
Suchfunktion geht grad nicht.Ich hoffe mal, es sind array und lexical_cast (oder stattdessen mehr Konstruktoren für string) dabei.
-
damnit, könnt ihr nicht lesen? KEINE STL! Ein bootprogramm kann schlecht auf die eingebundene c++ stdlib des OS zugreifen wenn noch keines da ist!!!!
Kurz geht nicht, okay ciao
-
Bevor Du jetzt hier rumkrakeelst würd ich Dir empfehlen Dich erstmal zu informieren:
www.boost.org hat nix mit STL zu tun. Und boost::array ist wahrscheinlich genau das was Du suchst.
Daß einige der dortigen Bibliotheken als Vorschlage für die nächste Standard-Lib (C++0x) vorgeschlagen sind sollte Dich eigentlich nicht stören, oder?
Wieso ist das ein Problem, wenn noch keine Lib da ist? Der Code von vector liegt doch direkt im Source vor und wird für das Projekt mitübersetzt. Da wird nicht auf ein spezifisches Betriebssystem zugegriffen...
@Optimizer:
Noch mehr neue Members für string wird es sicher nicht geben. Aber lexical_cast<> ist meines Wissens dabei.MfG Jester
-
Wenn man keine Teilarrays übergeben will, wäre noch eine Lösung, die ich hier gerade nirgends sehe:
void funktion(const int (&foo)[123]) { }
Diese Funktion nimm jetzt nur einen int[123] an.
-
operator void schrieb:
Wenn man keine Teilarrays übergeben will, wäre noch eine Lösung, die ich hier gerade nirgends sehe:
void funktion(const int (&foo)[123]) { }
Diese Funktion nimm jetzt nur einen int[123] an.
thx