@Neutral General: Es muss nicht immer var sein
Durch die angabe von var wird intern die Adresse übergeben. Das heißt man kann auch gleich einen Pointer übergeben der dann logischer Weise nicht als var-Parameter übergeben werden muss.
@Snow: Ich glaub du hast einen Denkfehler bzw. schaust nicht weit genug. Im ersten Moment hast du natürlich Recht damit das Irgendwo jede Variable im Speicher liegt und man den Wert sichern kann in dem man das, was im speicher steht sichert.
Gegen wir aber mal von einem Record aus der einen Pointer beinhaltet. Dann sicherst du zwar den Pointer der irgendwo hinzeigt aber nicht die Daten die dahinter liegen. Stellst du zu einem späteren Zeitpunkt diesen Record wieder her (und somit auch den Pointer) liegen die Daten wo der Pointer hinzeigt wohlmöglich schon nicht mehr dort und schon war die Speicherung des Records mit Pointer wertlos.
Kurz und knapp. Es gibt keine Möglichkeit einfach alles so einfach zu speichern um dies später wieder her zustellen. Wenn dann musst du dir vorher feste Regeln definieren (zum Beispiel keine Pointer in Records) und dich strikt daran halten. Wenn du dies machst kannst du dir aber auch gleich eine Klasse schreiben wo jede Variable bzw. jedes Property einem festgelegt typ hat und unterproperties davon auch wieder einem festen Typ entsprechen so das du später alle eigenschaften rekursiv durchgehen kannst.
Sozusagen eine Baumstruktur wo jedes Item wieder beliebig viele Unteritems haben kann.