structs


  • Administrator

    Grüsse zusammen,

    Kurze einfach Frage. Wir haben zwei structs, welche die gleichen Typen beinhalten. Also zum beispiel int, long, double. Kann man nun eine Variabel zu jedem struct erstellen und diese dann gegenseitig zuweisen? Hab leider kein C-Compiler und kann das nicht zu 100% beweisen. Aber mein Dozent hier, meinte dass dies gehen soll. Ich bin eigentlich der Meinung, dass es nur über die Zeiger geht. Was ist nun korrekt? Irgendwelche Quellen als Beweis? Danke im voraus!

    Grüssli



  • Hi,

    jap, das geht:

    #include <stdio.h>
    
    typedef struct {
      int i;
      float f;
    } Foo;
    
    void print(Foo *f) {
      printf("%i \t %g \n", f->i, f->f);
    }
    
    int main(int argc, char **argv)
    {
      Foo f1 = {-5, 2.7 };
      Foo f2;
      f2 = f1;
      print(&f2);
      return 0;
    }
    

    Gibt bi mir dann -5 und 2.7 aus.

    MfG

    GPC


  • Administrator

    Ich wusste ich hätte nen Code dazufügen sollen. So meinte ich das nicht, also hier noch den Code als Beispiel:

    #include <stdio.h>
    
    typedef struct {
      int i;
      float f;
    } Foo1;
    
    typedef struct {
      int u;
      float o;
    } Foo2;
    
    int main(int argc, char **argv)
    {
      Foo1 f1;
      Foo2 f2;
    
      f2 = f1;  // Das gibt doch einen Fehler aus oder?
    }
    

    Grüssli



  • Ja, klar. Das geht nicht. Hast ja zwei verschiedene Typen, die du nicht einfach so casten kannst. Der Weg in dem Fall wäre wohl eine assign - Funktion, die die Elemente einzeln zuweist.



  • Dravere schrieb:

    f2 = f1;  // Das gibt doch einen Fehler aus oder?
    

    machst du so:

    *(Foo1*)&f2 = f1;
    

  • Administrator

    Oder ganz brutal über den Zeiger 😉
    (Wie ich in der Vorschau gerade gesehen habe es net gezeigt hat ^^)

    Naja ok, dann sage ich das mal dem Dozent. Damit er nicht wieder so nen Quark erzählt :p 😃
    Hättest du vielleicht noch eine C-Definition Quelle dazu?

    Grüssli und danke!



  • Dravere schrieb:

    Naja ok, dann sage ich das mal dem Dozent. Damit er nicht wieder so nen Quark erzählt

    bin ja mal gespannt was er dazu meint 😉
    kannst ja seine aussage hier posten...

    Dravere schrieb:

    Hättest du vielleicht noch eine C-Definition Quelle dazu?

    das ist nur ein fauler trick.
    ich denke, es gibt grenzfälle wo das schief geht.
    ein 'vernünftiger programmierer' macht sowas nicht...


  • Administrator

    net schrieb:

    bin ja mal gespannt was er dazu meint 😉
    kannst ja seine aussage hier posten...

    Seine Aussage ... die war nicht wirklich lang:
    Zitat " " Zitat ende
    😉

    Ich konnte es ihm sogar dann noch auf einem C-Compiler zeigen. Hatte ganz vergessen, dass MS Visual Studio ja auch "rein" C kompilieren kann.
    Er war ehrlich gesagt ein wenig überrascht, denn er ist wohl einer von diesen Dozenten, welche einfach immer nur auf C und C++ rumhacken. So kommt es mir zumindest bis anhin rüber. Dafür redet er über Java beinahe nur, als wäre es die Erfindung des Jahrhundertausends ^^
    Er hat zwar mal C und C++ gelernt, aber wenn er nicht mal so etwas mehr weiss, dann ist es ja wirklich schlimm. Und vor allem ist es schlimm, wenn er unerfahrenen Programmierer immer erzählt wie schlecht C/C++ ist und dann noch mit solche Quarkargumenten, welche gar nicht stimmen. Dabei ist Java ja eigentlich nur in einer Hinsicht "besser". Der Programmierer wird bevormundet. Was ich mehr als Nachteil sehe, weil ich das nicht gern habe.

    Aber naja, besser ich sage nichts weiteres darüber, sonst artet das wieder in so eine Java gegen C/C++ Diskussion aus. ^^

    Grüssli



  • Dravere schrieb:

    besser ich sage nichts weiteres darüber, sonst artet das wieder in so eine Java gegen C/C++ Diskussion aus. ^^

    ach nö. java und C haben beide ihre daseinsberechtigung 🙂


Anmelden zum Antworten