Wenn schon kopierst du main.config auf mainkopie.config oder ?
Man kopiert doch in Richtung Kopie und nicht umgekehrt ?
Der Smilie und *seufz* als Bemerkung geht Richtung C, und nicht an Dich für Dein Nachfragen

So ist das gemeint.
Du kannst Sie ja lesend übergeben nur stehen dann 2000 Bytes am Stack und müssen von dort wieder entfernt werden (Call by Value mit Zusatz const bezogen auf "Datenfeld" - in diesem Fall Struktur - ."config" (zu Struktur "main" zugehörig).
Nach dem Aufruf der Funktion die Kopie auf das Original zu kopieren und zu behaupten, daß die Originalwerte erhalten bleiben ist Veräppelung aber sonst schon gar nichts.
Im Übrigen wird die Technik des Versorgens eines Arbeitsbereichs aus einem Originalbereich in der Praxis bei Softwarefirmen sehr wohl verwendet und ist oftmals notwendig um Seiteneffekte (eben das unabsichtliche Überschreiben von Datenfeldern) im Originalbereich, der innerhalb des RAM Speichers gelegen ist, von vornherein auszuschliessen.
Dies ist Profialltag, also was solls.
Gehirn anstrengen - gut und schön - es gibt aber keinen Schutz vor gewollter Veränderung der Werte, das ist ein Widerspruch in sich.
Wenn Du einen Einkauf machst musst Du alle Posten zusammenzählen. Ebenso verhält es sich beim Programmieren (schützenswerte Originalstruktur oder -record im Fall von Pascal etc. und veränderbrae temporäre Strukturkopie).
Das ist Programmieren, der Kunst Zügel anzulegen ist das Argument hier nicht. Es handelt sich um "künsteln" und außerdem sollte die Kunst des Programmierens auf das Einhalten von Programmiernormen sich einschränken = täglich gelebter Alltag.
Eine Originalstruktur, die verändert werden darf oder muss, braucht selbstnafreilich keine Kopie um an Ihre sie zu verändernde Funktion übergeben zu werden.