Länge eines Arrays bestimmen
-
-
Tja, ich interpretier das einfach mal als "getroffene Hunde bellen". Und damit können wir das Thema wohl abhaken.
-
AJ schrieb:
CStoll schrieb:
AJ schrieb:
Ich nehme das Konstrukt arr[] = { ... } einfach nicht her, dahingehend hab ich nicht das Problem die Größe später noch bestimmen zu müssen, denn ich weiß ja die Größe. Mal ganz davon abgesehen, dass ich es nicht logisch finde erst eine Größe festzulegen und sie dann später wieder ermitteln zu müssen. Auch bei arr[] = { ... } legst du eine feste Größe fest.
Ja, das hat eine feste Größe, allerdings steht die nicht explizit im Quelltext - und an der Stelle benötigt man das sizeof-Konstrukt, um die Elementanzahl zu bestimmen.
Wie gesagt, ich rede von unterschiedlichen Programmiertechniken. "Nötig" ist das sizeof-Konstrukt da auch nicht. Nur sinnvoller, wenn man nur eine Stelle anstatt zwei ändern will, mehr aber auch nicht.
Und wieso wehrst du dich dann dagegen, es einzusetzen, wenn es sinnvoller ist?
Die Probleme des sizeof (gerade mit der Array-zu-Pointer-Umwandlung) sind bekannt*, die Vorteile auch - also sollte jeder selber abschätzen, was er verwenden will.
(ich setze es z.B. so ein, daß ich die Größe des Arrays nach der Deklaration bestimme und mir merke - und da überwiegen dann die Vorteile)int vals[] = {...}; const int valsize = sizeof(vals)/sizeof(vals[0]); ... berechne(vals,valsize);
* bzw. sie sollten bekannt sein
-
@CStoll
Ich hab geschrieben: Es ist sinnvoller zu benutzen, wenn man nicht zwei Stellen ändern will sondern nur eine. Wobei das wiederrum das arr[] = { ... } Konstrukt voraussetzt, aber egal.CStoll (off) schrieb:
also sollte jeder selber abschätzen, was er verwenden will.
Das schreib ich doch schon die ganze Zeit.
Wer lieber das sizeof()-Konstrukt verwenden will, der soll das tun. Ich persönlich würde es nie verwenden und auch nicht empfehlen. Warum man sich daran so aufhängt versteh ich ehrlich gesagt überhaupt nicht.
groovemaster schrieb:
Tja, ich interpretier das einfach mal als "getroffene Hunde bellen". Und damit können wir das Thema wohl abhaken.
Wenn du meinst...
Es heißt übrigens: "Nur betroffene Hunde bellen"
Da wär ich aber nicht der einzige
-
AJ schrieb:
@CStoll
Ich hab geschrieben: Es ist sinnvoller zu benutzen, wenn man nicht zwei Stellen ändern will sondern nur eine. Wobei das wiederrum das arr[] = { ... } Konstrukt voraussetzt, aber egal.Und wie machst du es sonst, wenn du ein Array mit (z.B.) verschiedenen Parameterwerten festlegen willst?
(btw, wozu gibt es denn das arr[]={...}? doch nur, damit sich der Programmierer keine Gedanken mehr machen muß, wieviele Werte in dem Array stehen.)
-
AJ schrieb:
Es heißt übrigens: "Nur betroffene Hunde bellen"
Da könnte man jetzt auch wieder drüber streiten. Man findet nämlich sehr wohl beide Formen, wobei meiner Erfahrung nach die getroffenen Hunde verbreiteter sind.
Mit solchen absoluten Aussagen (wie auch "die sizeof-Variante ist immer schlechter") sollte man vorsichtig sein.
-
Hallo miteinander. Bin neu hier
Hab gerade diesen Thread entdeckt. Da wir in der Technikerschule auch momentan mit Arrays rumprogrammieren hab ich mir das ganze hier mal durchgelesen. Eine Frage ist aber auf gekommmen:
Kann mir jemand erklären was das ganze hier genau bedeutet:
sizeof(array) / sizeof(array[0])
Reicht nicht einfach das hier:
sizeof(array)
Was macht im ersten Beispiel das / sizeof(array[0]) ?
Den / kenne ich bis jetzt nur als Geteilt-Funktion. Somit würde ich erstes Beispiel so interpretieren:
Errechne Größe des Arrays und teile das Ganze dann durch die Größe des Arrays an der Stelle 0!Könnte mir das ganze einer erklären?
mfg Alex
-
Errechne die Größe des gesamten Arrays und teile sie durch die Größe des ersten Elements => Was kommt raus?
-
sizeof(array)
liefert die Größe des Arrays in Byte
sizeof(array[0])
liefert die Größe des ersten Array-Elements (ebenfalls in Byte)
Wenn du diese beiden Werte dividierst (ja, / ist die Division), erhältst du die Größe des Arrays in Elementen - also die Anzahl der Array-Elemente.
-
Ach so. Ich dachte das sizeof mir direkt die Anzahl der Elemente ausgibt *ganzdoofbin*
Und die Größe der Elemente hängt vom Datentyp (int, double etc) ab oder?
-
AlexDozer schrieb:
Und die Größe der Elemente hängt vom Datentyp (int, double etc) ab oder?
Vom Datentyp, diese wiederum von der Implementierung. Sicher ist nur, dass sizeof(char) = 1 ist.
-
CStoll schrieb:
AJ schrieb:
@CStoll
Ich hab geschrieben: Es ist sinnvoller zu benutzen, wenn man nicht zwei Stellen ändern will sondern nur eine. Wobei das wiederrum das arr[] = { ... } Konstrukt voraussetzt, aber egal.Und wie machst du es sonst, wenn du ein Array mit (z.B.) verschiedenen Parameterwerten festlegen willst?
(btw, wozu gibt es denn das arr[]={...}? doch nur, damit sich der Programmierer keine Gedanken mehr machen muß, wieviele Werte in dem Array stehen.)
Entweder mit Konstanten, auch auf die "Gefahr" hin, dass ich zwei Sachen (eine Zahl und ein Wert) ändern muss. Oder ich lese die Werte gleich von einer Datei ein; ergo: dynamischer Array.
GuybrushThreepwood schrieb:
AJ schrieb:
Es heißt übrigens: "Nur betroffene Hunde bellen"
Da könnte man jetzt auch wieder drüber streiten. Man findet nämlich sehr wohl beide Formen, wobei meiner Erfahrung nach die getroffenen Hunde verbreiteter sind.
Mit solchen absoluten Aussagen (wie auch "die sizeof-Variante ist immer schlechter") sollte man vorsichtig sein.
Ok, mir ist nur die Variante mit den betroffenen Hunden bekannt. Man lernt ja immer wieder dazu ;).
Ich hab ja nicht gesagt, dass die sizeof-Variante "immer" schlechter ist und wenn ja, dann hab ich mich korrigiert. Allerdings sehe ich persönlich immer noch mehr Nachteile darin als Vorteile.Das mit den "absoluten Aussagen" ist auch so ne Sache. Die menschliche Sprache an sich bietet schon einen großen Interpretationsspielraum, warum sollte es bei der Schrift anders sein? Überhaupt sollte man nicht immer so viel Gewichtung hineinlegen, finde ich (auch wenn ich mich da wohl an der eigenen Nase packen muss; aber wer ist schon unfehlbar?); vielleicht auch ein wenig versuchen zwischen den Zeilen zu lesen. Wenn man es genau niederschreiben würde, wie man es meint, dann würde wohl ein halber Roman nicht ausreichen. Das weiter zu führen, würde jetzt aber wohl zu sehr vom Thema ablenken...
-
Ein wunderschönes Schlusswort