von zeigern und strukturen



  • hallo wie kann ich *daten einen wert zu weisen?

    #include <stdio.h>
    #include <stdlib.h>
    
    struct Struktur
    {
    int *daten;
    };
    
    int main()
    {
    struct Struktur *str;
    str=(struct Struktur*)malloc(sizeof(struct Struktur));
    (*str).daten=(int*)malloc(sizeof(int));
    }
    


  • Warum verwendest du hier überhaupt Zeiger?

    Generell entspricht aber

    (*str).daten
    

    gleich

    str->daten
    

    Dann kannst du mittels des Dereferenzierungsoperators darauf zugreifen:

    *(str->daten) = 42;
    


  • str->daten[0] =
    

    geht auch.

    Da es selten sinnvoll ist, ein int via malloc zu holen, beschreib mal dein eigentliches Problem.



  • das problem war eigentlich nur, dass ich über einen zeiger auf eine struktur auf einen zeiger innerhalb dieser struktur zugreifen wollte, damit ich keine globalen variablen anlegen muss, und (*str).(*daten) wollte der compiler nicht annehmen.

    die lösungen funktionieren aber, vielen dank!



  • das problem war eigentlich nur, dass ich über einen zeiger auf eine struktur auf einen zeiger innerhalb dieser struktur zugreifen wollte, damit ich keine globalen variablen anlegen muss

    wieso muss du globale Variablen anlegen wenn du es nicht so machst?



  • weil mehrere unterprogramme gleichzeitig auf die selben daten zugreifen sollen und mir schlicht und ergreifend nur die möglichkeiten globale variablen und übergabe von zeigern auf datenstrukturen eingefallen sind.

    war meine idee denn so schlecht?



  • warum nicht einfach den inneren Zeiger weglassen - da brauchst du immer noch keine globalen

    struct Struktur
    {
    int daten;
    };
    
    int main(void)
    {
      struct Struktur *str;
      str=malloc(sizeof(struct Struktur));
      str->daten=10;
      return 0;
    }
    


  • Jesse0815 schrieb:

    ...globale variablen...

    war meine idee denn so schlecht?

    Ja, di­let­tan­tisch.



  • Schön zusammengeschnipseltes "Zitat" @Wutz



  • struct Struktur 
    { 
    int daten; 
    }; 
    
    void meine_function(struct Struktur* str)
    {
      if(str->daten)...
    }
    
    int main(void) 
    { 
      struct Struktur str; 
      str.daten=10; 
    
      //dieser funktion ist es egal ob heap oder stack
      //die will nur einen pointer
      meine_function(&str);
    
      return 0; 
    }
    

    und jetzt noch mal die Frage

    damit ich keine globalen variablen anlegen muss

    warum musst du?


Anmelden zum Antworten