Strukturzeiger an Funktion in c übergeben

Lesezeit: 1 Minute

Benutzer-Avatar
schweizerisch

Ich habe ein Problem mit der Übergabe eines Zeigers auf eine Struktur an eine Funktion. Mein Code ist im Wesentlichen das, was unten gezeigt wird. Nach dem Aufruf von modify_item in der main-Funktion ist stuff == NULL. Ich möchte, dass Zeug ein Zeiger auf eine Elementstruktur mit einem Element gleich 5 ist. Was mache ich falsch?

void modify_item(struct item *s){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   s = retVal;
}

int main(){
   struct item *stuff = NULL;
   modify_item(stuff); //After this call, stuff == NULL, why?
}

Weil Sie den Zeiger übergeben nach Wert. Die Funktion arbeitet mit einer Kopie des Zeigers und ändert niemals das Original.

Übergeben Sie entweder einen Zeiger an den Zeiger (dh a struct item **), oder lassen Sie stattdessen die Funktion den Zeiger zurückgeben.

  • Übergeben wir den Zeiger nicht als Wert im Code unten, der von STS Balaji gepostet wurde? Funktioniert dieser Code nur, weil wir die Zeigeradresse (dh den Wert) übergeben, weil sie auf dem Heap zugewiesen ist?

    – Benutzer4252523

    7. Mai um 18:49 Uhr


void modify_item(struct item **s){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   *s = retVal;
}

int main(){
   struct item *stuff = NULL;
   modify_item(&stuff);

oder

struct item *modify_item(void){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   return retVal;
}

int main(){
   struct item *stuff = NULL;
   stuff = modify_item();
}

Ich würde vorschlagen, Ihren Code wie unten zu ändern, wenn die Funktion ‘modify_item’ beabsichtigt, das Mitglied der Struktur zu ändern, die als Argument übergeben wird.

void modify_item(struct item *s){
   s->element = 5;
}

int main(){
   struct item *stuff = malloc(sizeof(struct item));
   modify_item(stuff); 
}

  • Dies ist eine sehr gute dritte Alternative zu dem, was Doug C oben erwähnt hat.

    – Benutzer4252523

    7. Mai um 18:42 Uhr

1353680cookie-checkStrukturzeiger an Funktion in c übergeben

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy