Возможно инициализировать массив после объявления в C?
Есть ли способ объявить такую переменную, прежде чем ее инициализировать?
CGFloat components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Мне бы хотелось, чтобы он объявлял что-то вроде этого (кроме этого не работает):
CGFloat components[8];
components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Ответы
Ответ 1
Вы не можете назначить массивы, так что в основном вы не можете делать то, что вы предлагаете, но на C99 вы можете сделать это:
CGFloat *components;
components = (CGFloat [8]) {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Оператор ( ){ }
называется сложным литералом. Это функция C99.
Обратите внимание, что в этом примере components
объявлен как указатель, а не как массив.
Ответ 2
Если вы завершаете свой массив в структуре, он становится назначаемым.
typedef struct
{
CGFloat c[8];
} Components;
// declare and initialise in one go:
Components comps = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
// declare and then assign:
Components comps;
comps = (Components){
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
// To access elements:
comps.c[3] = 0.04;
Если вы используете этот подход, вы также можете вернуть Components
structs из методов, что означает, что вы можете создавать функции для инициализации и назначения структуры, например:
Components comps = SomeFunction(inputData);
DoSomethingWithComponents(comps);
comps = GetSomeOtherComps(moreInput);
// etc.
Ответ 3
Эта нотация для массивов и структур действительна только при инициализации, поэтому нет.