005
13.09.2003, 20:37 Uhr
virtual
Sexiest Bit alive (Operator)
|
Stringliterale (also das, was in doppelten Anführungszeichen steht), sind Konstanten. stell dir der Einfachhait halber einfach vor ein Literal hätten den typen char const * const, oder - wie es die meisten wohl schreiben würden: const char* const. Bei
Weist Du der Variablen text eine solche Konstante zu. Letztlich castest Du hier implizit alles, was const ist, weg. Manche Compiler warnen mit entsprechenden Flags (wie zB der gcc, option -Wwrite-strings) an dieser Stelle, andere nicht. Letztlich ist obiger Code generell schlechter Stil und man sollte schreiben:
C++: |
[b]const[/b] char* text = "Bla";
|
Die andere Frage war wohl, warum es mit
C++: |
char text[] = "Bla";
|
geht. Nun, das liegt einfach daran, daß der Obige Ausdruck eine abkürzende Array initialisierung ist. Man könnte auch schreiben:
C++: |
char text[] = {'B', 'l', 'a', 0};
|
Der Unterschied zwischen der Arrayinitialisierung und der Zuweisung ist ganz einfach der, daß text bei der Arrayinitialisierung seinen eigenen Speicher hat, bei der (Pointer)Zuweisung eben nicht. Der Kompiler kann Konstanten in einen READONLY Speicherbreoch legen, wird dies bei modernen Betriebssystemen idR auch tun. -> SIGSEGV wenn auf Konstante geschrieben wird. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |