Dereferenzieren Sie einen Zeiger innerhalb eines Strukturzeigers

Lesezeit: 2 Minuten

Benutzeravatar von Federico klez Culloca
Federico Klez Culloca

Ich habe eine Struktur:

struct mystruct
{
    int* pointer;
};

structure mystruct* struct_inst;

Jetzt möchte ich den Wert ändern, auf den gezeigt wird struct_inst->pointer. Wie kann ich das machen?

BEARBEITEN

Ich habe es nicht geschrieben, aber pointer zeigt bereits auf einen zugewiesenen Speicherbereich malloc.

Wie bei jedem Zeiger. Um es zu ändern die Anschrift es weist auf:

struct_inst->pointer = &var;

Um es zu ändern Wert an der Adresse, auf die es verweist:

*(struct_inst->pointer) = var;

  • Perfekt, das zweite war das, wonach ich gesucht hatte. Vielen Dank.

    – Federico Klez Culloca

    5. April 2010 um 23:34 Uhr

  • Danke. Gott, ich finde es toll, dass man hier immer eine klare Antwort bekommt

    – Benutzer12345613

    21. Februar 2012 um 0:57 Uhr

  • Ich würde auf jeden Fall die Klammern verwenden, um sicherzugehen, aber ist es notwendig

    – Robisrob

    14. Februar 2017 um 21:41 Uhr

  • sieht so aus, als ob es nicht benötigt wird, da das Strukturmitglied Vorrang hat en.cppreference.com/w/c/language/operator_precedence

    – Robisrob

    14. Februar 2017 um 21:44 Uhr

  • @robisrob Nein, sie sind nicht notwendig. Aber während ich die Antwort schrieb, musste ich einen Moment innehalten, um darüber nachzudenken, ob sie notwendig waren, also fügte ich sie hinzu, obwohl ich zu dem Schluss kam, dass sie es nicht sind … =)

    – Arkku

    14. Februar 2017 um 23:43 Uhr

Benutzeravatar von Brian R. Bondy
Brian R. Bondy

Sie erstellen einen Zeiger vom Typ mystruct, ich denke, Sie wollten vielleicht keinen Zeiger:

int x;
struct mystruct mystruct_inst;
mystruct_inst.pointer = &x;
*mystruct_inst.pointer = 33;

Wenn Sie stattdessen einen Mystruct-Zeiger auf dem Heap benötigen:

int x;
struct mystruct *mystruct_inst = malloc(sizeof(struct mystruct));
mystruct_inst->pointer = malloc(sizeof(int));
*(mystruct_inst->pointer) = 33;  

/*Sometime later*/

free(mystruct_inst->pointer);
free(mystruct_inst);

  • Ich wollte einen Zeiger. Die Wertänderung findet innerhalb einer Funktion statt. Außerdem habe ich bereits zugewiesen pointer zu einem malloc-ed Bereich des Speichers.

    – Federico Klez Culloca

    5. April 2010 um 23:38 Uhr

  • Ich denke, der Punkt der Antwort war, dass Ihr Codebeispiel keinen Speicher für die zugewiesen hat struct mystruct, nur ein nicht initialisierter Zeiger auf eine solche Struktur. Aber natürlich pointer innerhalb der Struktur muss auch irgendwo hin zeigen. =)

    – Arkku

    5. April 2010 um 23:41 Uhr


1391320cookie-checkDereferenzieren Sie einen Zeiger innerhalb eines Strukturzeigers

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

Privacy policy