Zeiger auf String
-
Hallo zusammen,
kann mir bitte jemand den Unterschied der Deklaration zwischen einem Zeiger z.B. auf int und einem Zeiger auf einen String erklären.
Einer Zeiger auf einen Int-Wert wird folgendermaßen deklariert:
int zahl;
int *ptr;
zahl=100;
ptr=&zahl;Dagegen kann man einen Zeiger auf einen Sting so deklarieren:
char *ptr = "Hallo";
Wieso muss ich bei einem String nicht vorher eine Variable bzw. ein Array deklarieren auf die der Zeiger zeigen kann?
Wieso funktioniert die selbe Schreibeweise nicht bei einem Int-Wert?
z.B.
int *ptr;
*ptr=100;Gruß Daniel
-
Hallo,
ein Stringliteral evaluiert immer zu einem
const char *
.
mfg Martin
P.S.: Ein int-konstante oder Zeichenkonstante etc. hat keine Adresse. Ein Stringliteral eben schon.
-
Die Idee zur Konferenz kam den Veranstaltern von heise.de und dpunkt-Verlag im Jahr 2010, die Para//el 2012 war die erste und sicher nicht die Letzte Konferenz dieser Art in Deutschland. Mit 160 Teilnehmern und 40 Vortragenden war die Konferenz bereits kurz nach der Frühbucherzeit ausgebucht, es konnten nach Angaben der Veranstalter nur ca. zwei Drittel der eingereichten Vorträge berücksichtigt werden.
Cut down your exam stress by using our latest Pass4sure and high quality VMWARE and California Institute of Technology gre. We provide updated exam sheets with 100% pass guarantee along with wikipedia
-
alicenancy schrieb:
Die Idee zur Konferenz kam den Veranstaltern von heise.de und dpunkt-Verlag im Jahr 2010, die Para//el 2012 war die erste und sicher nicht die Letzte Konferenz dieser Art in Deutschland. Mit 160 Teilnehmern und 40 Vortragenden war die Konferenz bereits kurz nach der Frühbucherzeit ausgebucht, es konnten nach Angaben der Veranstalter nur ca. zwei Drittel der eingereichten Vorträge berücksichtigt werden.
Was hat das mit Zeigern, Stringliteralen und Integerkonstanten zu tun?
-
Ganz genau genommen wird das String-Literal (um den Null-Terminator ergänzt) benutzt, um ein Array mit statischer Speicherdauer zu initialisieren (s. 6.4.5 (5) in ISO/IEC 9899:1999). Im Grunde passiert, wenn du
int main(void) { char const *p = "foobar"; }
schreibst, Folgendes:
char const foobar_literal[] = "foobar"; int main(void) { char const *p = foobar_literal; }
...nur nimmt dir der Compiler das Erzeugen von foobar_literal ab. So hat "foobar" effektiv den Typen char const[7] (bzw. wird zum Initialisieren eines Objektes dieses Typs verwendet, aber der Unterschied ist vor allem dann spannend, wenn du einen Compiler bauen willst).
Im Übrigen: Jedes Mal, wenn ein String-Literal einem char* zugewiesen wird, tötet Algorithmos, Gott der Progammierung, ein niedliches Kätzchen auf unnötig grausame Weise. Du kannst in String-Literalen nicht herumschreiben, daher sollte der const-Qualifier immer erhalten bleiben.