Binary или Text - первый вопрос
Исторически приложения использовали сложные двоичные форматы для структурированных данных, но в настоящее время существует тенденция определения текстового представления, поскольку это приводит к созданию более удобных для разработчиков и пользователей файлов.
XML был создан как переносимый способ сохранения и обмена структурированными данными.
Если бы это был я, я бы использовал XML-подобный, но менее неуклюжий YAML.
Если файлы, вероятно, станут действительно большими, вы можете сделать то, что делает OpenOffice, и сохранить их как текстовую разметку, но записать непосредственно в сжатый (я думаю, это zip для OO) архив.
Большинство языков уже имеют библиотеки сериализации; Я уверен, что есть некоторая библиотека Boost для C. Как правило, есть несколько интерфейсов сериализации, которые используют разные представления.
Если вы используете библиотеку, XML или YAML, ссылки будут подразумеваться в древовидном представлении. Если ваши данные имеют более общий график, то
Независимо от того, используете ли вы текст или бинарный файл, вам, возможно, придется нормализовать ссылки. Это проблема с указателем, которую вы упомянули. Один из способов решения этой проблемы - сохранить временные карты, которые используются при чтении или записи файла. То есть вы просто называете каждую цель ссылки, скажем, A1, A2, A3 ..., а затем используете ее как тег в месте назначения и как имя ссылки (думаю, href =) в источнике.
Я бы не использовал смещения файлов в качестве указателей, просто он кажется слишком хрупким и, естественно, имеет смысл использовать XML, YAML или что-то еще, что уже существует.