2017-01-17 1 views
0

Doppelzeiger übernimmt I haben einen doppelten Zeiger auf eine Funktion zu übergebenHindurchleiten ein Zeigerelementes in der Struktur, die ist Mitglied einer anderen Struktur zu einer Funktion, die

struct Animal{ 
     uint_32 *count; 
} 


struct forest{ 
     struct Animal elephant; 
} 

void pass(uint32 **count){ 
     printf("Count:%d\n",**count); 
} 

int main(){ 
    struct forest *gir; 
    gir=(struct forest*)malloc(sizeof(struct forest)); 
    gir.elephant.count=(int*)malloc(sizeof(uint32_t)); 

    pass(_______); //have to pass count value 
     return 0; 
} 

I verschiedene Kombinationen versucht, aber nicht sicher, wie zu handhaben dieser Fall.


kindlynote, habe ich es direkt auf SO geschrieben, da die tatsächlichen Code Aufstellen wäre unnötig zu verkomplizieren, da ich nur für bestimmte Lösung suchen werde.

+1

wie [das] (http://ideone.com/cCVrIU) – BLUEPIXY

+1

[Bitte beachten Sie, diese Diskussion auf, warum nicht den Rückgabewert von 'malloc zu werfen () 'und Familie in' C'.] (http://stackoverflow.com/q/605845/2173917). –

Antwort

4

Kurze Antwort:

pass(&gir->elephant.count); 

Sie benötigen die Adresse count in elephant in gir passieren.

Einer Ihrer Linie kann nicht kompilieren:

// gir.elephant.count=(int *)malloc(sizeof(uint32_t)); this one 
gir->elephant.count = malloc(sizeof *gir->elephant.count); 
if (gir->elephant.count == NULL) { // you should always check the return of malloc 
    free(gir); 
    return 1; 
} 
gir->elephant.count = 42; // maybe you want affect count to something? 

Und Sie ; am Ende Ihrer Strukturdeklaration vergessen. Und uint_32, nicht in stdint.h existieren, müssen Sie uint32_t verwenden. @chux beachten Sie, dass Sie nicht die richtige Flagge verwenden, um eine uint32_t in printf() zu drucken, müssen Sie PRIu32 verwenden.

struct Animal { 
    uint32_t *count; 
}; 

struct forest { 
    struct Animal elephant; 
}; 

void pass(uint32_t **count) 
    printf("Count:%" PRIu32 "\n", **count); 
} 

Sie shoud nicht cast return of malloc

+1

danke, ich schrieb dies direkt auf so, daher der Fehler –

+1

Ich finde mich UV-ing 'ptr = malloc (sizeof * ptr * n);' Antworten - es ist so einfach. Gute Antwort. – chux

+1

BTW 'printf (" Count:% d \ n ", ** zählen);' braucht Arbeit. Sign-ness- und width-Probleme. – chux

Verwandte Themen