Strings mit Adresse anzeigen lassen
-
hallo Forum !
ich schreibe Montag eine Klausur und habe noch ein paar Fragen offen. Ich hoffe, ihr könnt mir helfen
Mir ist bsp nicht klar, warum die nachfolgenden Zeichen angezeigt werden, obwohl ich eigentlich mit dem Adressoperator rumgespielt habe.
Desweiteren steht ein Fragezeichen über meinen Kopf, warum die Adresse von genau einer Speicherzelle nicht angezeigt wird. Natürlich ist es kein Problem, die Adresse des ganzen Strings zu sehen, aber wenn ich die Adr. von bsp. dem sechsten Zeichen haben will ?Soweit:
#include <iostream.h> #include <string> void main() { char a[100],*b; int c; cout<<"Haupteingabe: "<<endl; cout<<"\n\n"; cin.get(a,100); cout<<"\n\n"; cout<<"Von welcher Speicherzelle wollen Sie die Daten ?"<<endl; cin>>c; cout<<"\n\n"; b=&a[c]; cout<<"Zelle :"<<c<<endl; cout<<"nachfolgende Zeichen :"<<&(a[c])<<endl; //wieso nachfolgende `? cout<<"Zeichen :"<<a[c-1]<<endl; cout<<"Adresse der Zelle :"<<*b<<endl; //Adr.genau der Zelle erwünscht cout<<"\n"<<endl; cout<<"Adr. vom ganzen String :"<<&a<<"\n\n"; }
Vielen Dank für den Service
-
wreeze schrieb:
/* #include <iostream.h> */ // NEIIIN! Es heißt <iostream> !!! #include <iostream> #include <string> using namespace std; // auch nicht ganz unwichtig! int main() // void main ist nicht erlaubt { char a[100],*b; int c; cout<<"Haupteingabe: "<<endl; cout<<"\n\n"; // wie du meinst, aber ich würde endl verwenden cin.get(a,100); cout<<"\n\n"; cout<<"Von welcher Speicherzelle wollen Sie die Daten ?"<<endl; cin>>c; cout<<"\n\n"; b=&a[c]; cout<<"Zelle :"<<c<<endl; cout<<"nachfolgende Zeichen :"<<&(a[c])<<endl; //wieso nachfolgende `?
In C/C++ werden Arrays ab 0 indiziert (der Index gibt den Offset an). Das Array
char a[100];
kann man also über die Indizen 0..99 ansprechen.
wreeze schrieb:
cout<<"Zeichen :"<<a[c-1]<<endl; cout<<"Adresse der Zelle :"<<*b<<endl; //Adr.genau der Zelle erwünscht
b ist ein Zeiger; er enthält die Adresse. Du dereferenzierst ihn, d.h., du greifst auf den Wert, auf den er zeigt, zu. Übergib ihn, wie er ist, dann bekommst du auch deine Adresse.
wreeze schrieb:
cout<<"\n"<<endl; cout<<"Adr. vom ganzen String :"<<&a<<"\n\n"; return (0); // int main () muß dann antürlich ein int zurückgeben }
Moritz
-
erstmal danke für die Antwort.
bei
cout<<&a[5];
bekomm ich nicht die Adr von Zelle 5 von sondern die nachfolgenden Zeichen.
Und das irritiert mich.
Desweiteren habe ich ja schon im Quelltext das schon angesprochen, weil ja nach der Zelle gefragt wurde.
cout<<&a[c-1];
damit sollte nach deiner Theorie die Adr. von Zelle c angegeben werden, und, wie gesagt, es kommen die nachfolgenden ZeichenWas meinst du mit übergeben ?
kannst du mit bitte den Quelltext sagen, denn man nutzen muss, damit man die Adresse ausgeben kann, von der Zelle, nach der gefragt wurde?mit anderen worten:
cout<<"Adresse der Zelle 5 :"<<&a[5]<<endl;
funtkioniert nicht. es kommen die nachfolgenden zeichen, nicht die adresse von a[5]
-
wreeze schrieb:
bei
cout<<&a[5];
bekomm ich nicht die Adr von Zelle 5 von sondern die nachfolgenden Zeichen.Das Problem ist, dass C-Strings nunmal über char Arrays/Zeiger repräsentiert werden. Und damit sind diese Zeiger für Streams entsprechend überladen. Die einfachste Möglichkeit dies zu umgehen, ist ein void* Casts.
cout << "Adresse der Zelle 5 :" << static_cast<void*>(&a[5]) << endl;