Pointer an Funktionspointer



  • Hallo zusammen,

    ich habe folgenden Code:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct p{
        char	name[50];
        char	vorname[50];
        int		*alter;
    }Person;
    
    typedef struct data{
        Person	*next;
        void (*func1)(Person *);
    }Persondata;
    
    static void printfinfo(Person *p){
        printf("Person information\n");
        printf("----------------------\n");
        printf("Vorname:%s\n",p->vorname);
        printf("Name:%s\n",p->name);
        printf("Alter:%s\n",p->alter);
        printf("----------------------\n");
    }
    
    int main(){
    
        Person *test1;
        Persondata	*datas;
        int		alter=50;
    
        test1 = (Person *)malloc(sizeof(Person));
        datas = (Persondata *)malloc(sizeof(Persondata));
    
        strcpy(test1->vorname, "Muster");
        strcpy(test1->name, "Mustermann");
        test1->alter = &alter;
    
        datas->next = test1;
        datas->func1 = &printfinfo;
        datas->func1(datas->next);
    
        return 0;
    
    }
    

    Wenn ich dieses Programm kompiliere und ausführe, so bekomme ich die Ausgabe:
    Person information
    ----------------------
    Vorname:Muster
    Name:Mustermann
    Alter:2
    ----------------------

    Alter sollte doch 50 sein. Was mache ich hier falsch?

    Gruss + Danke,
    Haksi



  • probier mal so:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct p
    {
        char    name[50];
        char    vorname[50];
        int     alter;
    }Person;
    
    typedef struct data
    {
        Person    *next;
        void (*func1)(Person *);
    }Persondata;
    
    static void printfinfo(Person *p)
    {
        printf("Person information\n");
        printf("----------------------\n");
        printf("Vorname:%s\n",p->vorname);
        printf("Name:%s\n",p->name);
        printf("Alter:%d\n",p->alter);
        printf("----------------------\n");
    }
    
    int main()
    {
        Person test1;
        Persondata    datas;
    
        strcpy(test1.vorname, "Muster");
        strcpy(test1.name, "Mustermann");
        test1.alter = 50;
    
        datas.next = &test1;
        datas.func1 = printfinfo;
        datas.func1 (datas.next);
    
        return 0;
    }
    


  • Hallo,
    ich muss irgendwie:

    test1->alter = &alter;
    

    lösen. Da die Variable alter zuerst bearbeitet wird. Wie gesagt ist dies eine vereinfaschung meines Codes.



  • ok, dann wieder mit pointer

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct p
    {
        char    name[50];
        char    vorname[50];
        int     *alter;
    }Person;
    
    typedef struct data
    {
        Person    *next;
        void (*func1)(Person *);
    }Persondata;
    
    static void printfinfo(Person *p)
    {
        printf("Person information\n");
        printf("----------------------\n");
        printf("Vorname:%s\n",p->vorname);
        printf("Name:%s\n",p->name);
        printf("Alter:%d\n",*p->alter);
        printf("----------------------\n");
    }
    
    int main()
    {
        Person test1;
        Persondata    datas;
        int alter = 50;
    
        strcpy(test1.vorname, "Muster");
        strcpy(test1.name, "Mustermann");
        test1.alter = &alter;
    
        datas.next = &test1;
        datas.func1 = printfinfo;
        datas.func1 (datas.next);
    
        return 0;
    }
    

    🙂


Anmelden zum Antworten