Tag 13

Reading time ~3 minutes

Kleines Programm zum besseren Verständnis von Pointern

#include <stdio.h>

#define LEN 8

int main(void)
{
    int   i = 0;
    int* pI = &i;

    printf("Wert in i: %i \t Adresse von i: %p\n" ,i ,&i);
    printf("Wert in pI: %p \t Adresse von pI: %p\nWert an der Stelle im Speicher des Wertes von pI: %i \n\n" ,pI ,&pI, *pI);

    i = 1;

    printf("Wert in i: %i \t Adresse von i: %p\n" ,i ,&i);
    printf("Wert in pI: %p \t Adresse von pI: %p\nWert an der Stelle im Speicher des Wertes von pI: %i \n\n" ,pI ,&pI, *pI);

    *pI = 2;

    printf("Wert in i: %i \t Adresse von i: %p\n" ,i ,&i);
    printf("Wert in pI: %p \t Adresse von pI: %p\nWert an der Stelle im Speicher des Wertes von pI: %i \n" ,pI ,&pI, *pI);

    return 0;
}

Kleines Programm zum besseren Verständnis von Structs

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

// basics
struct person
{
    int age;
    char name[100];
};

typedef struct person pers;
typedef pers* pPers;

int main(int argc, char **argv)
{
    struct person hansi;
    hansi.age = 35;
    strcpy(hansi.name, "HANSI Han\n");
    printf("%i %s\n", hansi.age, hansi.name);

    pers dagmar;
    dagmar.age = 36;
    strcpy(dagmar.name, "DAGMAR DURR\n");
    printf("%i %s\n", dagmar.age, dagmar.name);

    pPers glug;
    glug = (pers *)malloc(sizeof(pers));
    glug->age = 10;
    strcpy(glug->name, "GLUG GLUCK\n");
    printf("%i %s\n", glug->age, glug->name);


    // linked list
    typedef struct element
    {
        int val;
        struct element *next;
    } element_t;

    typedef element_t *pElement_t;

    pElement_t head = NULL;
    pElement_t elem = NULL;

    // list fill
    for(int i = 1; i <= 10; i++)
    {
        elem = (element_t *)malloc(sizeof(element_t));
        elem->val = i;
        elem->next  = head;
        head = elem;
    }

    // list print
    while (elem)
    {
        printf("%i\n", elem->val);
        elem = elem->next;
    }

    return 0;
}

Pointer Arithmetic

#include <stdio.h>

int main(void)
{
    char buffer[100];
    int* p = (int*) buffer;

    for (size_t i = 0; i < 100; i++)
    {
        buffer[i] = '0';
    }

    int  a = 0x65242332;
    buffer[99] = 0;
    *p = a;
    p++;
    *p = a;
    printf("%s\n", buffer);
    return 0;
}