Was ist der Sinn von Pointern/Zeigern?

Hallo zusammen,

ich habe ein Problem. Ich schreib nä. Woche eine Klausur in Info (C++). Von Pascal her weiß ich noch einiges, jedoch fehlt mir vollstes Verständnis für die Pointer, ein wichtiger Bestandteil meiner Prüfung.

Ich hab mir deswegen noch schnell ein Buch gekauft (von o’reilly), jedoch ist dieses Thema dort auch sehr knapp gehalten, z.T. auch nicht verständlich.

Könnt ihr mir deshalb mal bitte erklären, was überhaupt mir Pointer anfängt?

Vielen Dank schon mal,
Grüße, Jenny.

Hallo zusammen,

ich habe ein Problem. Ich schreib nä. Woche eine Klausur in
Info (C++). Von Pascal her weiß ich noch einiges, jedoch fehlt
mir vollstes Verständnis für die Pointer, ein wichtiger
Bestandteil meiner Prüfung.

Ja, habt ihr denn nicht auch eine Vorlesung oder Kursus oder was auch immer gehabt? Zeiger sind eines der mächtigsten Elemente unter C/C++ überhaupt.

Ganz kurz: Pointer/Zeiger sind Variablen, die eine Speicheradresse enthalten.

Sie zeigen also auf einen bestimmten Speicherplatz. Um sie richtig zu verstehen, solltest Du Dir etwas Wissen über Speicherverwaltung eines Computers aneignen. Eigentlich sollte das alles Bestandteil des Unterrichts gewesen sein.

Wie wäre es mit ein paar konkreteren Fragen?

Gruß

Fritze

Hi Jenny,

wie auch schon von Fritze gesagt, wären konkretere Fragen wichtig.

Zum Lesen hab ich für dich folgendes:
http://www.mathematik.uni-marburg.de/~cpp/

Dort dann Kapitel 17.
Pointer sind ein heikles Thema und man braucht ne Weile und auch ne Menge Erfahrung, um diese richtig und effizient einzusetzen. Es gibt sogar Bücher, die sich nur um Pointer und was man alles damit falsch machen kann, drehen.

Ich habe auch ne Weile gebraucht, bis ich mal mit den Pointern klarkam, aber ich glaube dennoch, dass ich nicht alles 100%ig darüber weiß.

Ciao, Bill

Pointer sind Variablen, die nicht den Wert, sondern die Speicheradresse enthalten. stelle dir vor, man hat eine komplexe Struktur mit hunderten von Byte, die man an eine Funktion übergeben will. Das macht man dann mit Pointern, damit man nicht alles im Speicher herumkopieren muß.

Zeiger sind ein zentrales Konzept für C

Folgendes Beispiel muß man verstehen, dann geht der Rest auch:

int i;
int *zeiger_auf_integer; // Eine Variable
// namens „Zeiger_auf_integer“, die eine Adresse auf ein int
// enthält, Schreibweise „int* varname“ oder „int *varname“

i=17; // i hat nun den Wert 17
zeiger_auf_integer=&i // &i:„Adresse-von-i“
*zeiger_auf_integer=19; // Dereferenzierung :
// *abc = „Worauf-abc-zeigt“
// Also hat i jetzt den Wert 19

superkomplexesstruct s;
s.Name=blabla
s.Adresse=blublu
callprozedur(&s);

.
.

void callprozedur(superkomplexesstruct *s_zeiger)
{
// s_Zeiger->Name ist blabla
// s_Zeiger->Adresse ist blublu
}

Gruß
Moriarty

mit pointern lassen sich auch sehr schön dynamische objekte erzeugen, z.B. sog. dynamic linked lists: (was eine häufige anwendung davon sein dürfte)

struct list
{
int id;
list* next;
};

int main()
{

list *head;
list *temp;

head = new list;
head->next = NULL;

temp = head;

temp->next = new list;
temp->next = NULL;

for(int x = 1; x id = x;
temp = temp->next = new list;
temp->next = NULL;
}

for(list* temp = head; temp->next != NULL; temp = temp->next)
{
cout id

Pointer sind Variablen, die nicht den Wert, sondern die
Speicheradresse enthalten. stelle dir vor, man hat eine
komplexe Struktur mit hunderten von Byte, die man an eine
Funktion übergeben will. Das macht man dann mit Pointern,
damit man nicht alles im Speicher herumkopieren muß.

Das ist ja alles schön und gut, aber was ich nicht in meinen Kopf reinkrieg ist: wozu brauch ich dann „normale“ Variablen. Hätte nicht eins von beidem genügt? Beziehungsweise: wo liegt denn genau der Unterschied?

Generell ist es doch so: ich habe einen Wert, oder von mir aus eine komplexe Struktur, und darauf will ich unter Verwendung eines Schlüsselwortes (z.B. Variablenname) zugreifen. Oder hab ich da was falsch verstanden?