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