Есть заголовочный файл example.h. В нём объявлена переменная.
struct idenf storage[256];
Данный файл подключен в example1.c, example2.c и example3.c. Если в файле example1.c изменить содержимое одного из элементов этого массива, при доступе к storage из файла example2.c будут ли видны эти изменения?
Если ты будешь собирать example1.c example2.c и example3.c в один бинарник, то у тебя будет ошибка линковки потому что в каждом объектном файле будет лежать переменная storage и случится конфликт имен.
Если ты хочешь иметь доступ из каждого файла, то ты должен объявить переменную в одном из с-файлов а в example.h написать extern struct idenf storage[256];
Не должно быть конфликта имён: это объявление внешней переменной. Все объявления с одним именем из разных объектных файлов линковщик склеит в одно.
Вот если бы ты написал int x = 1;, это бы не прокатило. Поскольку тут не только объявление, но и инициализация. Внешняя переменная может быть инициализирована только в одном из файлов (или ни в одном — тогда по умолчанию инициализируется нулями).