/* 
 * Lerneinheit C-Pointer
 * Einheit 2: Pointer Grundlagen
 * Aufgabe 2.2.3: Verändern über Pointerzugriff
 * 
 * Ergänze das Programm aus Aufgabe eins. Weise jeder Variablen über 
 * den Pointer einen neuen Wert zu und gib ihn über den Variablennamen aus. 
 * Dann ändere die Werte über den Variablennamen und gib sie diesmal über den Pointer aus.
 */

#include <stdio.h>

int main(void)
{
    /*Variablen deklarieren und initialisieren*/
    int var_a=4;
    short var_b=26;
    long var_c=586;
    
    /*Pointer deklarieren*/
    int *pt_a;
    short *pt_b;
    long *pt_c;
    int *pt_d=NULL;
    
    /*Anfangsadressen dem Pointer zuweisen*/
    pt_a = &var_a;
    pt_b = &var_b;
    pt_c = &var_c;
    
    
    printf ("Ausgabe der Speicheradressen: \n");
    printf ("------------------------------\n");
    printf ("Variable 1 (direkt):         %d\n", &var_a);
    printf ("Variable 1 (ueber Pointer):  %d\n", pt_a);
    printf ("Variable 2 (direkt):         %d\n", &var_b);
    printf ("Variable 2 (ueber Pointer):  %d\n", pt_b);
    printf ("Variable 3 (direkt):         %ld\n", &var_c);
    printf ("Variable 3 (ueber Pointer):  %ld\n", pt_c);
    printf ("Nullpointer:                 %d\n\n", pt_d);
    
    *pt_a = 18;
    *pt_b = 20;
    *pt_c = 22;
    
    printf ("Ausgabe ueber Variable: \n");
    printf ("------------------------------\n");
    printf ("Variable 1 (direkt):         %d\n", var_a);
    printf ("Variable 2 (direkt):         %d\n", var_b);
    printf ("Variable 3 (direkt):         %ld\n\n", var_c);
    
    var_a = 19;
    var_b = 21;
    var_c = 23;
    
    printf ("Ausgabe ueber Pointer: \n");
    printf ("------------------------------\n");
    printf ("Variable 1 (ueber Pointer):  %d\n", *pt_a);
    printf ("Variable 2 (ueber Pointer):  %d\n", *pt_b);
    printf ("Variable 3 (ueber Pointer):  %ld\n", *pt_c);
    
	getchar();
    return 0;
}
