pointer auf char/anfängerfrage

Gast #2375915
Lesenswert?

Frage siehe Kommentar:
1
#include <stdio.h>
2
#include <stdlib.h>
3

4
int main() {
5
char zeile[10] = "Hallo";
6
char *p_anfang;
7
p_anfang = &zeile[0];
8
printf(">>%s<<\n",p_anfang);  //Weshalb  wird hir nicht die Addresse von "z"                           //ausgegeben?
9
p_anfang = zeile;
10
printf(">>%s<<\n",p_anfang);
11
printf(">>%s<<\n",zeile);
12
p_anfang = &zeile[1]; 
13
printf(">>%s<<\n",p_anfang);
14
return 0;
15
}
Hier wird schließlich auch die Addresse ausgegeben:
1
#include <stdio.h>
2
#include <stdlib.h>
3

4
int main() {
5
int zeile = 5;
6
int *p_anfang;
7
p_anfang = &zeile;
8
printf(">> %d <<\n",p_anfang);
9

10
return 0;
11
}

Gruß Jooee
Gast #2375957
Lesenswert?

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?
1
#include <iostream>
2
using namespace std;
3

4
int main()
5
{
6
    char zeile[10]="hallo";
7
    char *p_zeile;
8
    p_zeile = &zeile[0];//  mit dem &_operator weise ich doch p_zeile die addresse von h zu.
9
    cout << p_zeile << endl; // Ausgabe ohne Derefernzierungsoperator müsste mir doch die Addresse liefern!
10
    return 0;
11
}

Gruß Jooee
Gast #2375994
Lesenswert?

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
Lesenswert?

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:
1
p_zeile = zeile;

>     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 schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren