M
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 ...