Datenzuweisung von versch. Datenstrukturen



  • Hallo,
    Ich habe zwei Codes, die Datenzuweisung durchführen sollen.

    char *a ; //code 1
    int *b ;
    (*a) = (char)(*b);
    *******************************************************
    struct Bitfeld //code 2
    {
    unsigned char a:4;
    };
    struct Bitfeld bfZeiger;
    unsigned char
    bitstrom;
    (*bfZeiger) = (struct Bitfeld)(*bitstrom);

    Code 1 ist richtig, wobei Code 2 falsch ist, warum?
    Danke



  • Probier mal

    bfZeiger->a = *bitstrom;
    


  • Das zweite Beispiel ist deswegen falsch, weil man einer Struktur nur wieder eine Struktur zuweisen kann und sonst nix anderes. Der Grund dürfte wohl das Padding im Speicher sein, das bei einer Struktur vorkommen kann. Ein kleiner Beispielcode:

    int main(void)
    {
      struct meine_struct 
      {
        int n;
      } a, b, c = { 77 };
    
      a = c;  /* ok */
      b = 21; /* fehler */
    
      return 0;
    }
    

    Die erste Zuweisung funktioniert problemlos, während die zweite vom Compiler nicht akzeptiert wird. Und das ist im Prinzip genau das, was Du im zweiten Beispiel versuchst. Das Du Pointer und casts verwendest, verschleiert die Sache nur ein wenig ...


Anmelden zum Antworten