Neuling bräuchte mal einen kleinen Stubs in die richtige Richtung... ;)



  • Das hab ich mir auch schonmal überlegt. Funktioniert auch soweit echt gut, habs grad nochmal ausprobiert. 😉
    Weiß jetzt auch wieder warum ich es nicht weiter verfolgt habe. Und zwar kann man ja die Brettgröße usw. ändern. Also muss ich auch die Werte in der "Speicher Funktion" überschreiben oder ändern...



  • chl schrieb:

    Weiß jetzt auch wieder warum ich es nicht weiter verfolgt habe. Und zwar kann man ja die Brettgröße usw. ändern. Also muss ich auch die Werte in der "Speicher Funktion" überschreiben oder ändern...

    dafür gibt es Zeiger 🙂



  • Okey, Danke schonmal... 🙂 Der Tip mit den Zeiger ist gut. Daran hätt ich ehrlich gesagt überhaupt nicht gedacht. Hab jetzt mal meine ganzen Notizen durchgeblättert und mal "schnell" ein Model geschrieben. Irgendwo sitzt aber ein Fehler, seh ihn nur nicht.

    int f1 (int x)      //Speicher Funktion
    {
         int a=5;
         return a;
    }
    
    int main(int argc, char *argv[])
    {
        int b;                      //Werte übergabe
        b=f1(0);
        printf("%i\n",b);
    
        int (*ptf) (int);          //Werte überschreiben
        ptf=f1;
        ptf(10);
    
        int c;                      //Werte wieder übergeben
        c=f1(0);
        printf("%i\n",c);
    
      system("PAUSE");	
      return 0;
    }
    


  • Ich sehe keinen Fehler, da ich nicht weiß, was du erwartest, dass f1 tut.

    f1 bekommt einen Parameter x, der allerdings nie benutzt wird. f1 deklariert außerdem eine lokale Variable und gibst den Wert zurück, nachdem du dieser lokalen Variable dem Wert 5 zugewiesen hast. Sprich: f1 gibt unabhängig von x immer 5 zurück.

    Mit

    int (*ptf) (int);          //Werte überschreiben
    ptf=f1;
    ptf(10);
    

    hast du einen Funktionszeiger 'ptf' auf f1 deklariert und führst demnach die Funktion aus. pft ist f1 und deshalb liefert ptf unabhängig von dem Parameter '10' immer eine 5 zurück. Das selbe gilt für deine dritte Zuweisung mit int c;



  • Okey... Ich werd mich da noch mal reinlesen müssen. Ganz so richtig hab ich das wohl noch nicht vertstanden. Aber auf jedenfall schon mal ein ganz großes Danke! Ich weiß zumindest jetzt wie ich das ganze realisieren kann. Ist ja immerhin schon mal die halbe Miete... 😉

    Werd mich wieder melden... Schöner Abend noch! Chl 🙂



  • void set(int *x) { // DAS IST EIN ZEIGER(!): int *x
    x = x * 3;
    }

    int main(int argc, char *argv[])
    {
    int z = 5;
    set(z);
    // ...
    return 0;
    }



  • Mit Zeiger muß man aber in der Funktion dereferenzieren:

    void set(int *x) // DAS IST EIN ZEIGER(!): int *x
    {
      *x = *x * 3; // * bedeutet Inhalt (Dereferenzierung)
    }
    


  • Hallo zusammen,

    So also nach dem ich die halbe Nacht gelesen, probiert, geflucht ;), wieder gelesen hab, bin ich ein großes Stück weiter.

    Das mit den Zeiger funktioniert wunderbar, Danke für die Hinweise! 🙂

    Nur wie es leider allzu oft ist, für jedes gelöstes Problem, kommen zwei neue... 😉 Aber eins nach dem Anderen...

    Anforderung ist, jede Funktion soll in einer seperaten *.c Datei realisiert werden.

    Problem: Wie machen ich meinen anderen Funktionen mein "Informations struct" bekannt? Muss ich die ganzen struct details in jeder c-Datei schreiben?!



  • Nein, die Deklaration deiner Struktur mußt du einfach in eine Header-Datei (.h) scheiben und diese dann von den Source-Dateien mittels #include <xxx.h> einbinden.



  • Das ist ja einfach mal genial mit der Header Datei! Vielen Danke, So langsam nimmt das ganze doch Form an... 😉

    Okey, nächste Frage! (Ich hoffe ich nerv noch niemand, versuche soviel wie möglich selbst rauszufinden, aber an manche Sachen oder Möglichkeit denkt man einfach am Anfang nicht O:))

    Da das Programm ja zwei Modi aufweißt (Step und automatic) hab ich die beiden per enum durchgezählt. Dabei steht 0 für step und 1 für automatic. So jetzt schreibe ich in mein "Informations Struct" für den Modus eine 1. Also automatic.
    Kann ich jetzt per printf den Wert ausgeben, aber nicht die Zahl sondern das Wort automatic?!



  • if (enumvariable==automatic)
       printf("automatic");
    else if (enumvariable==step)
       printf("step");
    

    Es ginge erheblich gemein kürzer 🤡 , aber ich will nicht so sein.


Anmelden zum Antworten