C различает присваивание (которое является выражением) и инициализацию (которое является частью определения переменной). В частности, синтаксис = { ... }
действителен только для инициализации.
Если вы хотите сделать это с отдельным циклом, вам нужно два вложенных цикла (или много повторяющегося кода для установки всех элементов):
for (int i=0; i<26; i++) {
for (int j = 0; j<7; j++) {
R[i].Rpr[j] = NULL;
}
}
В качестве альтернативы, просто используйте инициализацию:
repere R[26] = { { { NULL } } };
Технически это только инициализирует первый элемент внутреннего массива в структуре в первом элементе внешнего массива, но C не имеет "полуинициализированных" переменных. Правило состоит в том, что если есть инициализатор, который не покрывает все поля переменной, они неявно устанавливаются в ноль. Для указателей это означает, что все они являются нулевыми указателями.
Фактически, этот инициализатор «все инициализировать с 0» можно сделать как более коротким, так и более общим:
repere R[26] = { 0 };
Этот { 0 }
инициализатор работает и для других типов. (Некоторые компиляторы предупреждают об этой конструкции (« отсутствует фигурные скобки в инициализаторе » и т. П.). Эти компиляторы глупы и должны остановиться.)