Was haben "Pointer" bzw. "Zeiger" in einer Programmiersprache eigentlich für einen Sinn?

3 Antworten

Benötigt man zum Programmieren bestimmter Dinge. In Java gibts keine Pointer aber intern werden da auch Pointer benutzt! ZB für Parameterübergaben per Referenz. Ansonsten braucht man Pointer zB wenn man eine Liste programmieren will.

Woher ich das weiß:Studium / Ausbildung – Informatikstudium

triopasi  09.04.2016, 09:56

Tutorials sind zum Verständnis und haben so meist keinen praktischen Zweck.

0
Burn91 
Beitragsersteller
 09.04.2016, 09:51

Okay.

Weil ich habe nur ein paar Tutorials gesehen wo ein Wert einer Variable über einen Zeiger ausgegeben wird oder ihr Wert verändert wird. Und dann hab ich mich gefragt wieso das nicht einfach normal ausgegeben oder verändert wird

0

Das ist die einzige Möglichkeit, Variablen dynamisch anzulegen, also erst dann, wenn das Programm schon läuft.

Manchmal weiß man am Anfang noch nicht, ob eine Variable überhaupt gebraucht wird, aber das könnte man noch so regeln, dass man eben mehr Speicherplatz verbraucht.

Viel wichtiger sind Arrays, also viele gleichartige Variablen, die man womöglich noch alle ansprechen können will, ohne für jede einen einzelnen Variablennamen zu haben. Ohne Pointer müsste man z. B. für jeden Bekannten, dessen E-Mail-Adresse man speichern will, einen eigenen Variablennamen einführen. Ebenso Stacks - lokale Variable bei rekursiven Funktionen sind ohne Pointer nicht realisierbar.

Selbst die einfachsten Prozessoren haben (auf Maschinenebene) wenigstens einen Pointer - den Adresszähler, der auf die Speicherzelle zeigt, in der der nächste abzuarbeitende Befehl steht.

Und weil auch die bekannteste abstrakte Maschine - die Turing-Maschine - als ganz wesentlichen Bestandteil einen Zeiger auf die Zelle, die gerade in Bearbeitung ist, hat, und es auch theoretisch keine Maschine geben kann, die mehr kann als eine Turing-Maschine, ist zumindest zu vermuten, dass keine turing-vollständige Programmiersprache ohne Pointer auskommt.

(Was nicht heißt, dass es keine Programmiersprachen wie VB(A), Java, C# gibt, die sich schämen, Pointer zu kennen, und ihre Pointer vor ihren Programmierern so gut wie möglich verstecken. Anmerkung: Das kann nach meinen Erfahrungen zu wunderbar gut versteckten Bugs führen, z. B. wenn man in C# das Schlüsselwort "struct" durch "class" ersetzt, weil man ein Feature braucht, das nur Klassen, aber keine Strukturen bieten. - Pointer sind am Anfang etwas schwerer zu verstehen, aber hinterher weiß man dafür immer, wo man dran ist.)

Woher ich das weiß:Berufserfahrung – Software-Entwickler

Burn91 
Beitragsersteller
 09.04.2016, 11:09

Danke für deine ausführliche Beschreibung. Aber ich bin gerade erst dabei mir ein bisschen das Programmieren beizubringen (bin aber iwie zu blöd dafür ;)). Aber wie ich sehe habe ich noch viel vor mir, den ich hab nicht allzuviel von deinem Text versanden ;)

LG

0
PWolff  09.04.2016, 11:19
@Burn91

Bitte sag nie "ich bin zu blöd für ..." - das wird zu schnell zur selbsterfüllenden Prophezeiung. Unser Gehirn hört (in diesem Fall zu) gut auf das, was wir uns selbst sagen.

Lern ein Stück nach dem anderen und lass dich nicht entmutigen. Es dauert ein paar Jahre, bis man die Grundzüge des Programmierens wirklich verstanden hat.

Was Pointer betrifft, die habe ich kennengelernt, als ich einen Mikroprozessor (damals 6502) in Maschinensprache programmiert habe und einfach mal ausprobiert habe, was passiert, wenn ich Pointer verwende. (Register, das Verhalten des Stack-Registers bei Verwendung des Stacks, Memory-Pointer (die beim 6502 zum Zweck besonderer Verwirrung sogar ihrerseits indiziert sein können).

0

hinter jedem namen, sei es eine routine, eine schleife, eine funktion, eine variable, steckt immer eine adresse, wo diese eine sache zu finden ist - diese adresse wird pointer genannt