Ich nehme mal an hier geht es um ein Übertragungsprotokoll. Du willst einen Header und die Nutzdaten in einen Puffer schreiben um diesen auf einmal irgendwie zu versenden.
Du musst deinen Puffer so groß machen:
Größe des structs - 2 + Payload Größe
2, weil Zeiger hier eben 16 Bit breit sind. Du willst aber nicht den Zeiger übertragen, sondern die Daten auf die er zeigt. Also brauchst du auch Speicher für die eigentlichen Daten. Es sei denn du reservierst einfach mal x + 128 Bytes, musst du den Puffer dann auch mit malloc() anlegen, da die Größe nicht mehr unbedingt zur Compile-Zeit feststeht.
Dann kopierst du erst das struct in den Puffer. Und dann ab der Stelle an der der Zeiger steht den Inhalt des Arrays. Du musst also zweimal memcpy() machen. Einmal mit dem struct. Einmal mit der Nutzlast.
Das läuft wie gesagt auch unter dem Stichpunkt tiefe Kopie/flache Kopie. Das Problem hat man hauptsächlich wenn man Kopien von Objekten mit dem Zuweisungs-Operator erstellt (auch in Java oder C#, da dort alles außer primitiven Datentypen eine Referenz ist!). Die meisten Artikel beziehen sich dann allerdings auf Copy-Konstruktoren was hier nichts hilft.