sizeof() über Pointer
-
Bashar schrieb:
Exakt, sizeof schaut in C++ grundsätzlich nur auf den statischen Datentyp eines Ausdrucks, und kann daher auch statisch (zur Compilezeit) berechnet werden.
char *s = "foo bar"; sizeof(s) => 4 (Architekturabhängig) // Preisfrage: sizeof("foo bar") => ???
Also ob da rauskommt was du dir denkst wage ich jetzt einfach mal zu bezweifeln.
Bei mir mit VC++ kommt 8 heraus, nähmlich die Anzahl der Bytes die er braucht um den String zu speichern.Bei:
int a[10]; sizeof(a) => 40 = 4 * sizeof(int)
War mir das ja schon klar, da sizeof den Speicherplatz liefert den der Datentyp im Frame beansprucht. Hätte jetzt allerdings gedacht das er bei einem Stringliteral auch nur die größe des Pointers liefert, da dieses ja eigentlich nicht im Funktionsframe angelegt wird, aber da habe ich mich wohl geirrt.
Gruß
Entyl Sa
-
Hätte zwar auch 4 gesagt, weil normal ja ein temp char-array erzeugt wird und ein
const char * darauf zeigt. Aber 3Compiler sagen "8"(VC++ 7, Mingw, Borland Cmd Line Compiler)
-
Entyl_Sa schrieb:
Also ob da rauskommt was du dir denkst wage ich jetzt einfach mal zu bezweifeln.
Warum?
Bei mir mit VC++ kommt 8 heraus, nähmlich die Anzahl der Bytes die er braucht um den String zu speichern.
Richtig, "foo bar" hat den Typ const char[8], also kommt 8 raus. Aber einfach Ausprobieren gibt keinen Preis
-
Im Zweifelsfall ist
cout << typeid("Hallo Welt!").name();
doch sehr nützlich
-
Ihr habt Bashars Post nicht richtig gelesen
"sizeof schaut in C++ grundsätzlich nur auf den statischen Datentyp eines Ausdrucks"
Und dass "foo bar" aus 8 Zeichen besteht, kann man doch problemlos zur Compilezeit feststellen
-
operator void: «A12_c» ... Dada lebt!
-
operator void schrieb:
Im Zweifelsfall ist
cout << typeid("Hallo Welt!").name();
doch sehr nützlich
A12_c ist mit etwas fantasie (?) echt ganz nützlich (mit g++)
-
Bashar schrieb:
Warum?
Die Frage war so gestellt das ich davon ausging das du 4 erwartest, ich wollte dir hier nichts unterstellen.
Bashar schrieb:
Richtig, "foo bar" hat den Typ const char[8], also kommt 8 raus. Aber einfach Ausprobieren gibt keinen Preis
Den wollte ich auch garnicht für mich in Anspruch nehmen, sonst hätte mein Post nicht so verfasst das zu erkennen ist wie ich zu dieser Information gekommen bin.
Aber ich werde schon noch irgendwie zu "Ewigen Ruhm, Ehre und Anerkennung" kommen.
-
davie schrieb:
A12_c ist mit etwas fantasie (?) echt ganz nützlich (mit g++)
Hups. Das letzte Mal, als ich mit MinGW und typeid() experimentiert hatte, war der Typ unter einem Bisschen Zeichenmüll noch gut lesbar. Na dann halt nicht
-
Ist er ja bei selbstdefinierten Klassen normalerweise auch: Foo => «F3FoovE».