| 

.NET C# Java Javascript Exception

3
Hi, gerade dabei mir die Zeiger einzuprägen und ich habe extreme Schwierigkeiten wenn ich mir die Frage stelle, ob ich das verstanden habe oder nur auswendig gelernt habe.

int i = 10;
int* p1 = &i; // p1 wird Adresse von i zugewissen. Man sagt p1 zeigt auf i ?
int** p2 = &p1; // p2 wird Adresse von p1 zugewissen. Man sagt p2 zeigt auf p1 ?


p2 steht irgendwo im Speicher und hat als Wert gespeichert die Adresse von p1.
p1 steht an der Stelle die p2 als Wert hat und als Wert wiederum eine Adresse wo i gespeichert ist.

p2 -> p1 -> i ...

soda bis hierher glaube ich passt. Aber jetzt fangen wir mal mit probieren an.

int** p3 = &i; // Pointer Pointer auf Variablen

Fall 1.) *p3 = 20; // i = 20 ? 1 mal referenziert dürfte doch funktionieren ?
Fall 2.)**p3 = Er nimmt den Wert 10 her und dereferenziert ihn und zeigt dann auf die Stelle 10 im speicher ?

Frage3.) Warum gibt es überhaupt Pointer Pointer ? Würde es nicht reichen nur ( einfache Pointer anzugeben )

char* p4

und dem Programmierer selber die Entscheidung lassen wieoft er referenziert ?

Frage4.) Die wichtigste Frage: Siehe Thema. Ist der einzige Grund das mein einen **p baut wirklich das er irgendwie auf einen *p zeigt oder gibt es da " mehr " ?
News:
20.11.2013
Blackstore 113 5
Ich finde Deine Fragen zu C/C++ immer recht interessant, spiegeln sie doch häufig auch meine Probleme mit den beiden Sprachen wieder. Meine ersten Gehversuche mit C sind schon locker 15 Jahre her, und damals schon hatte ich meine Schwierigkeiten, warum man ständig mit irgendwelchen Pointern und Pointern auf Pointern (was dann wieder dem Wert entspricht) in der Gegend herum schießt - das habe ich übrigens bis heute nicht verstanden. 6510-Assembler, das waren noch Zeiten ;-)
muffi 21.11.2013
2 Antworten
0
Mangels Zeit nur ein kurzes Beispiel:
Ein char-Array (eine durchaus gängige Repräsentation eines strings in C) ist effektiv auch nur ein char* auf das erste Element des Arrays. Ein char** ist damit ein Pointer, der auf einen String zeigen kann.
21.11.2013
ffordermaier 8,4k 3 9
0
thx ffordermaier. Wusste ich schon ;)

Also ich gestern schlafen gegangen bin dachte ich wüsste wenigstens irgendwas. Ich weiß gar nichts. Möchte aber wenigstens die ultra Basis können das ich in meinem Übungen weiter komme.

1.) Das einzige was ich vielleicht verstanden habe

int i;
// Ein facher Zeiger sollte immer auf Variablen zeigen
int* p1 = &1;
// Wenn ich jetzt so blöd bin ;) und mir nen Pointer Pointer bauen will, dann muss // sollte ? ich diesen auf einen normalen Pointer zeigen lassen
int** p2 = &p1;
// Und zum letzten mal weil so schön ist. Ich baue mir einen *** und dieser muss ? auf einen ** zeigen
int***p3 = &p2

Ich hoffe wenigstens das passt... wenn man das in ein Schema reinbringen.

* zeigt auf Adresse von Variablen
** zeigt auf Adresse von *
*** zeigt auf Adresse von ** usw

Die kleine Zwischenfrage drängt sich auf warum man wirklich ** braucht. Sobald ich eine Variable ändern will ( keinen Pointer) schreibe ich
Typ foo* = &Zu_veränderende_Variable ... und zack kann ich sie ändern ? Warum also den Aufwand antun einen ** zu erstellen auf einen * zeigen zu lassen und über diesen dann die Variable zu ändern ? Ganz kurze Antwort für sau blöde User bitte.

Und hier ein kleines Beispiel von mir:

char* p = "Hello";
char** pp = &p;

*p = "Funktioniert"; //klappt
pp[0] = "Funktioniert"; //klappt auch
//Hier der Versuche auf einzelne Elemente des Feldes zuzugreifen.
printf("%c",**p); // Fehler Erhoffte mir 'F'
printf("%c",p[0][1]); // Fehler Erhoffte mir 'u'
21.11.2013
Blackstore 113 5

Stelle deine C-Frage jetzt!