Zeiger / Pointer

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kwauka
Beiträge: 2
Registriert: Fr Apr 03, 2020 6:15 pm

Zeiger / Pointer

Beitrag von Kwauka » Fr Apr 03, 2020 7:30 pm

Hallo,
ich beschäftige mich gerade mit Zeigern unter C! Habe folgenden Code kopiert und verstehe dort etwas nicht ganz. Vielleicht kann mir von Euch jemand das Problem erklären oder mir einen Tipp dazu geben. Ich verstehe folgende Code-Zeile nicht:
a = *c + *d;
Ich verstehe nicht, wie *c den Wert 7 zugewiesen bekommt! Wie gesagt es wäre supper von Euch wenn mir jemand das einmal erklären könnte.
Ich Danke Euch für die Hilfe.

MFG, Reinhold

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    int a=2, b=5, *c=&a, *d=&b;  // a = 2 b=5 *c=2 *d = 5

    a = *c * *d;		// a=10 *c=2 *d=5
    printf("Ausgabe von a %d\n\n",a);

    *d -= 3;		// b=2, *d=2
    printf("Ausgabe von d %d\n\n",*d);

    b = a * b;		// b=20 b= 2 a=10
    printf("Ausgabe von b %d\n\n",b);

    c = d;			// *c=20
    printf("Ausgabe * von *c %d\n",*c);  // hier ist c  = 20
    printf("Ausgabe * von d1 %d\n",*d);
    printf("Ausgabe * von a %d\n\n\n",a); // a = 10

    b = 7;			// b=7 *d=7
    printf("Ausgabe ** von d %d\n", *d); // da b auf die Adresse von *d zeigt, ist *d = 7
    printf("Ausgabe ** von c %d\n",*c);  // c = ???????????
    printf("Ausgabe ** von b ist %d\n",b);  // b = 7
    printf("Ausgabe ** von a ist %d\n\n\n\n"); // a = 7 ------------

    a = *c + *d;		// a=14
    printf("Ausgabe von a %d\n",a);
    printf("Ausgabe c1 %d und Ausgabe d1 %d \n\n",*c,*d);
    printf("Ausgabe von a %d\n\n",a);
}
EDIT nufan: Code-Tags

nufan
Wiki-Moderator
Beiträge: 2557
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zeiger / Pointer

Beitrag von nufan » Fr Apr 03, 2020 9:30 pm

Hallo Kwauka! :)

d wird nach der initialen Zuweisung nicht verändert und zeigt während des kompletten Programms auf b.

c zeigt nach folgender Zuweisung auf die gleiche Stelle wie d:

Code: Alles auswählen

c = d;
Im Endeffekt zeigt c nun also auch auf b.

b wird kurz vor deiner Ausgabe der Wert 7 zugewiesen:

Code: Alles auswählen

b = 7;
Nachdem c auf b zeigt, ist *c nun 7.

War das verständlich? :)

Kwauka
Beiträge: 2
Registriert: Fr Apr 03, 2020 6:15 pm

Re: Zeiger / Pointer

Beitrag von Kwauka » Sa Apr 04, 2020 10:44 am

Hallo,
ja, das war verständlich, vielen Dank für die Antwort?
Viele Grüße

Antworten