pointer parameter



  • High

    Dachte ich könnte mit pointern umgehen!!!

    Wie übergebe ich syntaktisch korrekt die Adresse eines pointers?

    Zur Info: der Rückgabewert von alloc() steht nicht zur Verfügung.

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

    typedef struct
    {
    int i;
    char str[10];
    float f;
    }Struckt_s;

    void alloc(Struckt_s pStruckt)
    {
    pStruckt = (Struckt_s
    )malloc(sizeof(Struckt_s));
    }

    int main(void)
    {
    Struckt_s *pStruckt = NULL;

    alloc(pStruckt);

    pStruckt->i = 10; /*Hier krachts weil pStruckt immer noch "0" ist*/

    return 0;
    }

    Sitze irgendwie auf der Leitung, kann mir bitte einer einen Tritt geben!

    Schon mal danke
    brumm



  • ein zeiger ist ein zeiger (geiler satz, gell?)
    das bedeutet er zeigt auf etwas (soweit ists ja klar)

    Guru: was passiert bei einem funktionsaufruf?
    Ich: es wird eine Kopie der variable uebergeben.
    Guru: Auch bei einem Zeiger?
    Ich: Ja, eigentlich schon...
    Guru: was wird genau kopiert?
    Ich: der zeiger selber und nicht das objekt auf das er zeigt.
    Guru: Warum funktioniert alloc() also nicht?
    Ich: weil ich nur eine kopie des Zeigers uebergebe?
    Guru: exakt. wie sieht nun die Loesung aus?
    Ich: aeh... einen zeiger auf den zeiger uebergeben?
    Guru: exakt.

    (ja ich hab meine kindische phase :p)

    ich hoffe das reicht dir, wenn nicht: nachfragen.



  • Shade Of Mine das hast du mir sehr liebevoll beigebracht, noch mal danke.
    An 3 Stellen gedreht und schon funzts, aber manchmal lässt halt auch das Hirn ein bischen aus. Was solls

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

    typedef struct
    {
    int i;
    char str[10];
    float f;
    }Struckt_s;

    void alloc(Struckt_s **pStruckt)
    {
    *pStruckt = (Struckt_s*)malloc(sizeof(Struckt_s));
    }

    int main(void)
    {
    Struckt_s *pStruckt = NULL;
    alloc(&pStruckt);
    pStruckt->i = 10; /*Hier krachts weil pStruckt immer noch "0" ist*/
    return 0;
    }

    By brumm



  • oder in c++ ne referenz übergeben, oder du machst es im malloc style, und gibst den zeiger zurück, sähe dann so aus:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct
    {
    int i;
    char str[10];
    float f;
    }Struckt_s;
    
    Struckt_s* alloc(Struckt_s *pStruckt)
    {
    /*
       der Parameter *pStruct wird nicht genutzt, es empfiehlt sich,
       stattdessen die Anzahl der zu allokierenden pStruckts zu übergeben,
       wenn das softwaremäßig noch machbar ist
    return ((Struckt_s*)malloc(n * sizeof(Struckt_s)));
       n ist hier der übergebene Parameter.
    */
    return ((Struckt_s*)malloc(sizeof(Struckt_s)));
    }
    
    int main(void)
    {
    Struckt_s *pStruckt = NULL;
    
    pStruct = alloc(pStruckt);
    
    pStruckt->i = 10; /*Hier krachts weil pStruckt immer noch "0" ist*/
    
    return 0;
    }
    

    Ach ja, code-tags machen es erst richtig schön 😃

    mfg
    -bg-


Anmelden zum Antworten