[c] Pointer Verständnisproblem

C

::carnage::

Hallo,
bin gerade dabei C zu lernen und dachte die Pointer verstanden zu haben, bis ich folgendes ausprobiert habe:

Code:
#include <stdio.h>

int main()
{
      char *text="hallo";
      printf("\ntext: %s", text);
      printf("\n*text: %u", *text);

      system("PAUSE");
      return 0;
}

Das Ergebnis der ersten printf() Anweisung lautet: hallo
Die zweite printf() Anweisung gibt aus: 104

Ich dachte bisher, dass nur mit dem * Operator der referenzierte Wert (das "hallo") ausgelesen werden kann. Also so:

Code:
printf("\n*text: %s", *text);

In diesem Beispiel funktioniert das aber nicht. Hier liefert der Pointer ohne * Operator den hallo - Wert. Und woher kommt die Zahl 104? Nach meinem Verständnis wird nur mit %u und der Pointervariable ohne * Operator die Speicheradresse zurückgeliefert. Also so:

Code:
printf("\n*text: %u", text);

ich denke nicht, dass 104 die Speicheradresse ist, richtig?

Ich hoffe mein Problem ist einigermaßen klar... ;)
Kann mir das jmd. verständlich machen?

Gruß
 
Leider nicht so wirklich...
Also der char Pointer zeigt dann wohl nur auf "h", was den ASCII Wert von 104 hat. Soweit so klar, aber das * Operatorproblem verstehe ich immer noch nicht.
 
Jo, der char-Pointer zeigt eigentlich nur auf das erste Zeichen von dem "Hallo".
Nur kann man einen Zeiger auf einen Char auch als String interpretieren, wenn man davon ausgeht, dass irgendwann ein '\0' Zeichen kommt, das den String abschließt und sich so eine (mehr oder weniger) sinnvolle Zeichenkette ergibt.
der * Operator liefert eine Referenz auf das Objekt, auf das ein Zeiger zeigt.
Da der char* auf das 'H' zeigt, liefert er eine Referenz auf das 'H' und wenn man das 'H' dezimal ausgibt, kommt eben 104 raus (ASCII-Wert).

Mfg, jetzt klar?
 
Soweit so klar. Nur verstehe ich immer noch nicht, warum auch mit
Code:
printf("\ntext: %s", text);
der referenzierte Wert ausgegeben wird. text verweist doch nach meinem Verständnis nur auf den Speicherbereich und nicht auf den Inhalt der Variable.
 
Beichtpfarrer hat es ja schon geschrieben: Es wird solange der Speicherbereicht, der nach text kommt, ausgegeben, bis dort eine 0 steht.

Bsp:
Code:
void printstr(char *s)
{
    while (*s)
        putchar(*s++);
}

char *foo = "Hallo";

printstr(foo);
 
Zurück