Sollte ich mir beim Zeigerwerfen Gedanken über die Ausrichtung machen?

In meinem Projekt haben wir einen Code wie diesen:

// raw data consists of 4 ints
unsigned char data[16];
int i1, i2, i3, i4;
i1 = *((int*)data);
i2 = *((int*)(data + 4));
i3 = *((int*)(data + 8));
i4 = *((int*)(data + 12));

Ich habe mit meinem technischen Leiter darüber gesprochen, dass dieser Code möglicherweise nicht portierbar ist, da er versucht, eine zu übertragenunsigned char* zu einemint* die in der Regel eine strengere Ausrichtungsanforderung hat. Aber der technische Leiter sagt, das ist in Ordnung, die meisten Compiler behalten nach dem Casting den gleichen Zeigerwert und ich kann den Code einfach so schreiben.

Ehrlich gesagt bin ich nicht wirklich überzeugt. Nach Recherchen finde ich einige Leute, die sich gegen die Verwendung von Zeigergussteilen wie oben aussprechen, z.Hier undHier.

Also hier sind meine Fragen:

Ist es WIRKLICH sicher, den Zeiger nach dem Umsetzen in ein reales Projekt zu dereferenzieren?Gibt es einen Unterschied zwischen C-Casting undreinterpret_cast?Gibt es einen Unterschied zwischen C und C ++?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage