Gast
#2375915
Frage siehe Kommentar:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
Hier wird schließlich auch die Addresse ausgegeben:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
Gruß Jooee
|
Anzeige
|
pointer auf char/anfängerfrage
Gast
#2375915
Frage siehe Kommentar:
Hier wird schließlich auch die Addresse ausgegeben:
Gruß Jooee
Gast
#2375920
jooee schrieb: > printf(">>%s<<\n",p_anfang); //Weshalb wird hir nicht die Addresse von "z" //ausgegeben? jooee schrieb: > printf(">> %d <<\n",p_anfang); Such den Unterschied :-) Das liegt am Formatierungszeichen "%s" (fuer Stringausgabe) bzw. "%d" fuer die Ausgabe einer Integer-Zahl mit Vorzeichen. Das korrekte Formatierungszeichen um einen Zeiger auszugeben (=eine Adresse) ist uebrigens "%p". Die Verwendung von "%d" kann - je nach Compiler - zu einer Warnung fuehren. ZigZeg
Gast
#2375957
Hallo, ja gut dass dies am Formatierungszeichen s und d liegt glaub ich euch ja aber weshalb bekomme ich in c++ bei folgendem Code nicht die Addresse?
Gruß Jooee
Gast
#2375967
Weil cout meint es ist cleverer als Du. Versuch das gleiche mit printf unter c++ und die Welt ist wieder ok.
Gast
#2375973
Das ist eine antwort, wie keine...
Gast
#2375975
Oder anders: Bei
erwartest Du doch das er den Text ausgibt und nicht die Adresse des Ersten Zeichens von Zeile oder? char zeile[] und char *zeile ist das Gleiche!
Gast
#2375984
dann akzeptiere ich das halt so auch wenn mir die Logik nicht klar ist... Danke Gruß Jooee
Gast
#2375993
Es ist halt so definiert. Ich habs jetzt nicht ausprobiert, aber wenn man den pointer auf void* castet, würde ich tatsächlich erwarten, dass cout den pointer selbst als Hexzahl ausgibt.
Gast
#2375994
Ist doch eigentlich nicht so schwer: cout ist halt etwas komplexer, der Wald-und-Wiesen Programmierer kann irgendwas reinschieben und cout erkennt was zu tun ist, man muss sich nicht um irgendwelche Formatoperatoren kümmern. Schiebt man eine Zahl ein wird diese ausgegeben, schiebt man einen Buchstaben rein, kommt dieser heraus. Schiebt man einen String rein so wird dieser ausgegeben und genau hier liegt das Problem cout kann nicht unterscheiden ob ein String kommt oder ein Pointer auf ein Char, da es wie bereits oben erwähnt das Gleiche ist. Da allerdings viel häufiger Strings mit cout ausgegeben werden als Pointeradressen haben die Programmierer der cout Funktion nunmal entschieden das bei einem char-Pointer dessen Inhalt und nicht die Adresse ausgegeben werden soll.
Gast
#2376395
jooee schrieb: > Hallo, > ja gut dass dies am Formatierungszeichen s und d liegt glaub ich euch ja > aber weshalb bekomme ich in c++ bei folgendem Code nicht die Addresse? > > #include <iostream> > using namespace std; > > int main() > { > char zeile[10]="hallo"; > char *p_zeile; > p_zeile = &zeile[0];// mit dem &_operator weise ich doch p_zeile die addresse von h zu. Ja. Äquivalent wäre:
> cout << p_zeile << endl; // Ausgabe ohne Derefernzierungsoperator müsste mir doch die Addresse liefern! Nein. Wie kommst du darauf, daß das so sein müßte? p_zeile ist ein Zeiger auf char, und cout interpretiert den immer als Zeiger auf den Anfang eines Strings, den es dann ausgibt. Der Unterschied zu printf ist, daß letzteres variable Argumentlisten verwendet und daher keine Ahnung hat, von welchem Typ die übergebenen Argumente sind. Deshalb muß man mit dem Formatstring mit Sachen wie %s angeben, welchen Typ man übergeben hat. cout kann durch überladene Operatoren automatisch den Typ erkennen, und wenn der char* ist, wird eben der Text ausgegeben. > return 0; > } Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|