Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

C und Pointer/Zeiger

Diablokiller999 / 4 Antworten / Baumansicht Nickles

Hi Leute,also ich kriege das mit den Pointern nicht auf die Reihe.Ich habe zwar verstanden das sie auf eine Adresse/eine Variable hinweisen,aber das ist auch schon alles(obwohl ich irgendwie ahne dass das auch falsch ist).Habe auch schon etliche Seiten durchgegoogelt,ohne Erfolg!Kann mir jemand mal(am besten so einfach wie möglich) erklären was genau Pointer sind,wozu und wie sie gebraucht werden?
Am besten noch anhand von kleinen Beispielen für extra Dumme wie mich;)

THX schonmal im Vorraus

bei Antwort benachrichtigen
sinus Diablokiller999 „C und Pointer/Zeiger“
Optionen

Pointer sind Zeiger auf die Adresse der Variable im Speicher. Sprich ein Pointer zeigt genau auf den Speicherplatz einer Variable, wodurch du sie manipulieren kannst, besonders effektiv bei Listen und über geben von Arrays

bei Antwort benachrichtigen
mr.escape sinus „Pointer sind Zeiger auf die Adresse der Variable im Speicher. Sprich ein Pointer...“
Optionen

Vorsicht, pointer sind zeiger auf variablen im speicher, nicht auf die adresse einer variablen! Das wäre doppelt gemoppelt (aber natürlich legal und auch üblich).

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
mr.escape Diablokiller999 „C und Pointer/Zeiger“
Optionen

Pointer bzw. zeiger speichern nicht den wert einer (beliebingen) variable sondern nur die addresse davon.
Bsp.

typedef struct {

int len;
char text[256];
} TextMitLaenge;

int verglTML(TextMitLaenge t1, TextMitLaenge t2){
return strcmp(t1.text, t2.text);
}

int verglTML_pointer(TextMitLaenge *t1, TextMitLaenge *t2){
return strcmp(t1->text, t2->text);
}

int main(){
TextMitLaenge t1, t2;
/*hier werden die variablen t1, t2 mit texten gefüllt, irgendwas, nur zum test*/
strcpy(t1.text, "Beispiel");
strcpy(t2.text, "ohne Sinn");
printf("Ohne zeiger:\n");
printf("Wert von strcmp beim Vergleich von t1 und t2:%d\n", verglTML(t1, t2));
printf("Mit zeiger:\n");
printf("Wert von strcmp beim Vergleich von t1 und t2:%d\n", verglTML_pointer(&t1, &t2));
return 0;
}


Die (sinnlosen) variablen vom typ "TextMitLaenge" sind relativ groß (mind. 260 bytes).
Eine funktion, die etwas mit diesen variablen anstellt (hier z.b. vergleich der texte), müsste ohne zeiger die ganzen variablen als kopie bekommen, also 520 bytes mindestens. Verwendet man aber die zeiger, reicht die bloße angabe der adressen (2 * 4 bytes) aus.
Zeiger helfen also überflüssige speicherbewegungen zu vermeiden.
Soll die funktione am inhalt der variablen etwas ändern, wäre im fall der kopie wenig erreicht, den die änderung erfolgt an der kopie und das original bleibt unverändert. Kommen zeiger zu einsatz, ist ein direkter zugriff möglich. Das ist wiederum aber auch eine gefahr.


mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
the_mic Diablokiller999 „C und Pointer/Zeiger“
Optionen
cat /dev/brain > /dev/null
bei Antwort benachrichtigen