Lokale Struktur an Funktion übergeben



  • Uppps! völlig falsch, sry 😉 so nochmal:

    Ist es möglich eine lokal definierte Struktur in main an eine andere Funktion zu übergeben? Ich habe es probiert, komme aber zu keiner Lösung. Die globale Deklaration sollte nicht verwendet werden.

    Ich Bitte um Hilfe! 😃



  • Und wie hast du es probiert?


  • Mod

    Wo ist das Problem?

    #include <stdio.h>
    
    void call (void (*what)())
    {
      what();
    }
    
    int main()
    {
      void hello_world()
      {
        puts("Hello World!");
      }
    
      call(hello_world);
    }
    

    Natürlich sind lokale Funktionen nach Standard gar nicht erlaubt, aber sofern dein Compiler dies als Feature anbietet, sollte es eigentlich funktionieren.

    edit: Dies war die Antwort auf deine falsch gestellte Frage im Anfangsbeitrag. Danke für meine verschwendete Zeit 😡 . Stell Fragen bitte in sauberer, lesbarer Schriftsprache. Du erwartest, dass jemand sich die Zeit nimmt, dir zu helfen. Da solltest du auch bereit sein, dir wenigstens mal ein bis zwei Minuten Zeit zu nehmen, deine Frage zu formulieren.



  • SeppJ schrieb:

    edit: Dies war die Antwort auf deine falsch gestellte Frage im Anfangsbeitrag. Danke für meine verschwendete Zeit 😡

    Dass du jeden Mist, der nicht bei 3 auf den Bäumen ist, beantwortest, musst du dir schon selbst zuschreiben 🙂


  • Mod

    Bashar schrieb:

    Dass du jeden Mist, der nicht bei 3 auf den Bäumen ist, beantwortest, musst du dir schon selbst zuschreiben 🙂

    Stimmt, ich hätte lieber moderieren sollen und ihm wegen der Unstimmigkeit zwischen Überschrift und Text und der allgemeinen Undeutlichkeit der Fragestellung erst einmal meine drei Standardtlinks vorwerfen sollen:
    http://www.c-plusplus.net/forum/136013
    http://www.c-plusplus.net/forum/200753
    http://www.tty1.net/smart-questions_de.html

    Aber irgendwie habe ich den Eindruck, dass ich in letzter Zeit zu abschreckend bin, da ich fast nur noch diese Antwort gebe.



  • hat sich erledigt! Frage konnte ich mir selbst beantworten 😉 Die Struktur global definieren und dann lokal initialisieren. Trotzdem danke für die Antwort auf die nicht gestellte Frage 😃 🙂


  • Mod

    Bitmaske schrieb:

    hat sich erledigt! Frage konnte ich mir selbst beantworten 😉 Die Struktur global definieren und dann lokal initialisieren. Trotzdem danke für die Antwort auf die nicht gestellte Frage 😃 🙂

    Das klingt höchst verdächtig. Globale Variablen sind Mist, besonders für diese Anwendung. structs kannst du zwischen Funktionen herumreichen wie alle anderen Datentypen (außer Arrays) auch.



  • Also so meine ich es:

    struct sData
    	{	
    	int intFeld[20][20];
    
    	int inthase, intfuchs, intschrittweitefox;
    
    	double dlbnachwuchs_hase, dblnachwuchs_fuchs;
    	}Data;
    
    int main(void)
    {
    	struct sData Data, *pData= &Data;
    
    	/*typedef sData tData;
    
    	tData bunny, fox, Feld, nachwuchs_bunny, nachwuchs_fox,intschrittweitefox;*/
    
    	pData->inthase=100;
    	pData->intfuchs=20;
    	pData->dlbnachwuchs_hase=0.2;
    	pData->dblnachwuchs_fuchs=0.1;
    	pData->intschrittweitefox=5;
    
    	return 1;
    
    }
    

  • Mod

    Wo wird da jetzt irgendwas an eine Funktion übergeben? Und ist dir klar, dass du zwei Variablen namens Data hast, ein globales (definiert in Zeile 😎 und eines lokal in der main (definiert in Zeile 12)? Und dient pData irgendeinem tieferen Zweck, außer umständlich zu sein?

    Oder anders gesagt: Was möchtest du erreichen?



  • Oh ja natürlich 😉

    struct sData 
        {    
        int intFeld[20][20]; 
    
        int inthase, intfuchs, intschrittweitefox; 
    
        double dlbnachwuchs_hase, dblnachwuchs_fuchs; 
        }; 
    
    void InitialisiereFeld(struct sData *pData);
    
    int main(void) 
    { 
        struct sData Data, *pData= &Data; 
    
        /*typedef sData tData; 
    
        tData bunny, fox, Feld, nachwuchs_bunny, nachwuchs_fox,intschrittweitefox;*/ 
    
        pData->inthase=100; 
        pData->intfuchs=20; 
        pData->dlbnachwuchs_hase=0.2; 
        pData->dblnachwuchs_fuchs=0.1; 
        pData->intschrittweitefox=5;
    
        InitialisiereFeld(pData);
    
        return 1; 
    
    }
    
    void InitialisiereFeld(struct sData *pData)
    {
    .....
    
    }
    

    Es ging darum die Struktur in main zu definieren und zu initialisieren und dann weiter zu reichen an void InitialisiereFeld. Aber es ging nicht weil die Struktur ja nur lokal ist und somit für andere Funktionen sichtbar.


Anmelden zum Antworten