!!code verstehen!! Wie schaut die Struct aus?



  • equipment *eq = (equipment *)malloc(sizeof(equipment));
    	eq->yourself = 1;	
    	eq->sleeping_bag = 1;
    	eq->pc.tower = 0 | 1;
    	eq->pc.monitor = 0 | 1;
    	eq->pc.mouse = 0 | 1;
    	eq->pc.keyboard = 0 | 1;
    	eq->pc.cable_stuff = 1;
    	eq->pc.builtin_nic = 1;
    	eq->pc.games = 1;
    	eq->pc.running_OS = 1;
    

    Erste Zeile ist die Allocierung der Struktur im Speicher.

    Yourself, sleeping_bag sind normale int.

    pc scheint noch eine Struktur in der Struktur zu sein, aber von welchem Typ sind die Elemente wenn bei der Zuweisung eine 1 oder eine 0|1 zugewiesen werden kann?



  • das könnten bitfields sein

    struct meine_struct
    {
      unsigned a : 1;   // kann 0 oder 1 speichern
      unsignde b : 2;   // kann 0, 1, 2 oder 3 speichern
    };
    


  • struct equipment{
    	struct pc{
    		unsigned tower : 1;
    	};
    };
    
    printf("pc::tower: %i\n",eq->pc::tower);  // Ausgabe 1
    	eq->pc::tower = 0 | 0;
    	printf("pc::tower: %i\n",eq->pc::tower);  // Ausgabe 0
    	eq->pc::tower = 0 | 1;
    	printf("pc::tower: %i\n",eq->pc::tower);  // Ausgabe 1
            eq->pc::tower = 1 | 0;
    	printf("pc::tower: %i\n",eq->pc::tower);  // Ausgabe 1
    

    So richtig steig ich da nicht hinter. Was für ein Sinn würde ein Bitfeld machen? Wäre da ein Bool nicht besser, denn es scheint hierum zu gehen ob in dem Beispiel der Tower dabei ist oder nicht.



  • Warum schaust du dir nicht einfach die Definition von 'struct equipment' an, das ist wesentlich aufschlußreicher als dir anzusehen, wie die Member zugewiesen werden.

    Was für ein Sinn würde ein Bitfeld machen? Wäre da ein Bool nicht besser, denn es scheint hierum zu gehen ob in dem Beispiel der Tower dabei ist oder nicht.

    Ein Bitfeld belegt genau den Teil des Bytes, den es benötigt, ein bool braucht mindestens ein Byte an Speicher - das heißt mit bitfeldern werden deine Strukturen um einiges kompakter.



  • CStoll schrieb:

    Warum schaust du dir nicht einfach die Definition von 'struct equipment' an, das ist wesentlich aufschlußreicher als dir anzusehen, wie die Member zugewiesen werden.

    Hätte ich die Struktur dann müsste ich sie mir nicht zusammenbasteln.

    Leider habe ich die definition der Struktur nocht sondern einfach nur nen Codeschnipsel bekommen. Ich verstehe zwar was das Codeschnipsel machen soll will aber einfach die Ausgabe in der Console sehen als Bestätigung.



  • hmm

    also wenn das mit dem bitfeld einfach nur um Speichereinsparung geht wieso

    eq->pc::tower = 0 | 1;
    	eq->pc::tower = 1;   // dann nicht so? Bei beiden kommt das gleiche raus.
    

    oder wird das vom compiler dann als int allociert und nicht als bitfeld wenn man 0|1 schreibt?



  • 1. "0 | 1" ist dasselbe wie "1", nämlich ein int mit dem Wert 1. IMHO ziemlicher Blödsinn das so zu schreiben.

    2. Was ist eq->pc**::**tower? Gibt es in C überhaupt den Scope-Operator?!



  • LordJaxom schrieb:

    1. "0 | 1" ist dasselbe wie "1", nämlich ein int mit dem Wert 1. IMHO ziemlicher Blödsinn das so zu schreiben.

    2. Was ist eq->pc**::**tower? Gibt es in C überhaupt den Scope-Operator?!

    eq ist ein Pointer auf die Struktur equipment, darin gibt eine Struktur pc und tower ist eine variable aus der struktur.



  • Wäre das der Fall wäre der Zugriff aber eq->pc**.**tower (so wie oben im Ursprungspost).



  • LordJaxom schrieb:

    Wäre das der Fall wäre der Zugriff aber eq->pc**.**tower (so wie oben im Ursprungspost).

    jup habs grad gesehn.

    struct pc{
    	unsigned tower;
    };
    
    struct equipment{
    	struct pc pc;
    };
    
    eq->pc.tower = 0 | 1; //klappt
    
    struct equipment{
         struct pc{
    	    unsigned tower;
         };
    };
    
    eq->pc::tower = 0 | 1; //klappt
    


  • McSnoop schrieb:

    CStoll schrieb:

    Warum schaust du dir nicht einfach die Definition von 'struct equipment' an, das ist wesentlich aufschlußreicher als dir anzusehen, wie die Member zugewiesen werden.

    Hätte ich die Struktur dann müsste ich sie mir nicht zusammenbasteln.

    Und was soll das ganze dann darstellen? Aus dem oberen Fragment kann man nur ableiten, daß 'equipment' aus mindestens drei Membern besteht: yourself und sleeping_bag sind Zahlentypen (das kann alles von char bis long double sein), pc ist ein struct, bestehend aus den Elementen tower, monitor,... (auch alles Zahlenwerte). Punkt.



  • habe nur ne Einladung bekommen in Form von nem Codeschnipsel und was ich alles mitbringen soll und mich hatte dann nur noch irretiert was das 0 | 1 als zuweisung soll und was da als Datentyp hinkommt. Das das eine Struktur in der Struktur ist hat sich ja rauskristalisiert.

    Wenn man den kompletten Code dann ausführt gibts in der Console die komplette einladung als ausgabe. ^^


Log in to reply