Нет, вы не можете установить для них произвольные значения в одном операторе (если это не сделано как часть объявления).
Вы можете сделать это с помощью кода, например:
myArray[0] = 1;
myArray[1] = 2;
myArray[2] = 27;
:
myArray[99] = -7;
или (если есть формула):
for (int i = 0; i < 100; i++) myArray[i] = i + 1;
Другая возможность состоит в том, чтобы сохранить некоторые шаблоны, которые установлены во время объявления, и использовать их для инициализации массива, например:
static const int onceArr[] = { 0, 1, 2, 3, 4,..., 99};
static const int twiceArr[] = { 0, 2, 4, 6, 8,...,198};
:
int myArray[7];
:
memcpy (myArray, twiceArr, sizeof (myArray));
Преимущество этого (скорее всего) в том, что он быстрее и позволяет создавать меньшие массивы, чем шаблоны. Я использовал этот метод в ситуациях, когда мне нужно быстро инициализировать массив, но в определенное состояние (если бы все состояния были нулями, я бы просто использовал memset
).
Вы даже можете локализовать его для функции инициализации:
void initMyArray (int *arr, size_t sz) {
static const int template[] = {2, 3, 5, 7, 11, 13, 17, 19, 21, ..., 9973};
memcpy (arr, template, sz);
}
:
int myArray[100];
initMyArray (myArray, sizeof(myArray));
Статический массив (почти наверняка) будет создан во время компиляции, поэтому для этого не потребуется никаких затрат времени выполнения, и memcpy
должен быть ослепительно быстрым, вероятно, быстрее, чем 1229 операторов присваивания, но совершенно определенно меньше набирать твоя часть: -).