länge eines array
-
Vertexwahn schrieb:
numElements = sizeof Array / sizeof Array[0]; // Funktioniert nur wenn Array wirklich ein Array ist und nicht irgendein wilder Zeiger
Öhmm, also mir ist nicht ganz klar was du meinst. Ein "wilder Zeiger" kenne ich als einen Zeiger, der auf einen nicht existierenden (mir fällt auch grad keine besserere Erklärung ein) Speicherbereich zeigt.
-
Arrays sind doch Zeiger... die Berechnung von numElementsOfArray macht nur Sinn wenn "Array" ein Zeiger auf ein Array ist.
wenn ich die Anzahl der Elemente eines Funktionszeigers ausrechne brauche ich nicht erwarten, das dabei etwas Sinnvolles herauskommt - das meinte ich mit wilde Zeiger
-
Gehts bei Char nicht mit
strlen(const char*)
??
Wie es bei anderen Sachen geht habe ich keine Ahnung, zur not halt selber ne Schleife schreiben und warten bis das "elemnt" NULL oder \0 kommt??
Gruß eXitus
-
Vertexwahn schrieb:
Arrays sind doch Zeiger...
Nein...
int Array[10];// Kein Zeiger
die Berechnung von numElementsOfArray macht nur Sinn wenn "Array" ein Zeiger auf ein Array ist.
Eigentlich gibt es keine Zeiger auf ein Array. Nur Zeiger auf den Anfangswert eines Arrays.
wenn ich die Anzahl der Elemente eines Funktionszeigers ausrechne brauche ich nicht erwarten, das dabei etwas Sinnvolles herauskommt - das meinte ich mit wilde Zeiger
Ein wilder Zeiger ist z.B. das
int* i = new int; // i zeigt auf einen Speicherbereich delete i; // Dieser Speicherbereich wird gelöscht // Nun zeigt i immer noch auf den gelöschten Speicherbereich -> Wilder Zeiger
Die Berechnung von "numElements" klappt nur, wenn Array ein nicht-dynamisches Array ist.
EDIT: Blöder Satz -- gestrichen --
-
eXitus schrieb:
Wie es bei anderen Sachen geht habe ich keine Ahnung, zur not halt selber ne Schleife schreiben und warten bis das "elemnt" NULL oder \0 kommt??
Du gehst davon aus, dass nicht allokierter Speicher automatisch auf NULL steht. Das muss aber nicht unbedingt so sein. Ausserdem würde so ein NULL-Element ja hinter den Arraygrenzen liegen. Und sobald du über diese Grenzen hinaus gehst, kann dein Programm jeden Moment vom OS gekillt werden :).
-
ich bin davon ausgegeangen, dass du sowa wie
int array[100]
hast, und wissen willst, wie viel davon besetzt ist. Und ich habe geseagt, weil ich gedacht habe, dass du das wissen willst, das du bis zu dem Terminationszeicvhen des Arrays in einer Schleife suchst. Ich hab dich aber lweider wahrscheinlich missverstanden sry
Gruß eXitus
-
eXitus schrieb:
Gehts bei Char nicht mit
strlen(const char*)
??
Wie es bei anderen Sachen geht habe ich keine Ahnung, zur not halt selber ne Schleife schreiben und warten bis das "elemnt" NULL oder \0 kommt??
Gruß eXitusstrlen ist aber nur für null-terminierte Strings gedacht. Für "normale" Arrays ist das natürlich absoluter Käse, genauso wie die iterative Nullzeichen Suche.
godlikebot schrieb:
Du gehst davon aus, dass nicht allokierter Speicher automatisch auf NULL steht. Das muss aber nicht unbedingt so sein. Ausserdem würde so ein NULL-Element ja hinter den Arraygrenzen liegen.
Ähnlicher Käse.
eXitus schrieb:
Und ich habe geseagt, weil ich gedacht habe, dass du das wissen willst, das du bis zu dem Terminationszeicvhen des Arrays in einer Schleife suchst.
Siehe oben. Ein Array hat kein Terminationszeichen. Alles andere ist Definitionssache.
-
okok, ich hab scheisse geschwallt, ´nur bitte nicht so beachten, ich terminier meine Arrays immer (immer ein NULL oder /0 am Schluss), dann kann man das auch ganz leicht machen....
Gruß eXitus
-
Hallo
ich mal dieses Template mal gefunden :
// Template zum Ermitteln der Länge des festen Arrays template<class T, std::size_t N> std::size_t countem(T (&)[N]) { return N; // Länge zurückgeben } // anwenden : int x[10]; std::size_t y = countem<>(x);
Ich finde das sehr praktisch, auch wenn ich kaum noch feste Arrays einsetze.
bis bald
akari
-
Stand der Aufruf tatsächlich so im Beitrag? Richtigerweise reicht folgendes vollkommen aus
std::size_t y = countem(x);
-
Hallo
Stand der Aufruf tatsächlich so im Beitrag? Richtigerweise reicht folgendes vollkommen aus
nein, denn Aufruf habe ich mir selber als Beispiel schnell zusammengeschrieben. Natürlich kann man die Klammern weglassen. Immerhin weiß man mit Klammern sofort, das es ein Template ist.
bis bald
akari