008
12.05.2003, 09:01 Uhr
virtual
Sexiest Bit alive (Operator)
|
Wenn Du nur mit ints arbeiten willst, hast Du eigentlich drei Möglichkeiten: 1. Du merkst Dir die Größe beim Aufruf von new.
C++: |
int sizeof_ints = 100; int * ints = new[sizeof_ints];
|
Hat den nachteil, daß Du diese Größe überall hin mitschleppen mußt. 2. Du markierst das Ende mit einem Int. welches garantiert nicht vorkommen kann, zB
C++: |
int* ints = new[100]; ints[99] = hundertprozentig_niemals_sonst_verwendete_zahl;
|
Wenn Du nach hundertprozentig_niemals_sonst_verwendete_zahl suchst, solltest du dann auch die Größe bekommen (ist halt verwandt mit der von Dir vorgschlagenen Lösung). Nachteil liegt halt klar auf der Hand: vielleicht gibt es diese Zahl garnicht. 3. Du belegts ein int mehr als Du brauchst und tust da die Länge rein:
C++: |
int sizeof_ints = 100; int * ints = new[sizeof_ints+1]; ints[0] = sizeof_ints;
|
Das hat dan Nachteil, daß Du nicht - wie sonst üblich, mit 0 auf das erste Element im Array zugreifen darfst. Zwar kannst Du solche unflätigen Routinen Schreiben:
C++: |
int* new_int_array(int size) { int* ret = new int[size+1]; *ret++ = size; return ret; }
void del_int_array(int* array) { delete [] (--array); }
int sizeof_int_array(int* array) { return *(--array); }
|
Also quasi immer einen Zeiger auf den bereich verwenden, der hinter der Längenangabe liegt, aber solche Schweinerein finde ich für einen Anfänger wenig empfehlenswert udn auch sonst recht fragwürdig (das wird zwar auch in "professioneller" Software gemacht, allerdings selten und nur in klar definiertem Rahmen). -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |