问题
Is there a way to declare a variable like this before actually initializing it?
CGFloat components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
I'd like it declared something like this (except this doesn't work):
CGFloat components[8];
components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
回答1:
You cannot assign to arrays so basically you cannot do what you propose but in C99 you can do this:
CGFloat *components;
components = (CGFloat [8]) {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
the ( ){ }
operator is called the compound literal operator. It is a C99 feature.
Note that in this example components
is declared as a pointer and not as an array.
回答2:
If you wrap up your array in a struct, it becomes assignable.
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;
If you use this approach, you can also return Components
structs from methods, which means you can create functions to initialise and assign to the struct, for example:
Components comps = SomeFunction(inputData);
DoSomethingWithComponents(comps);
comps = GetSomeOtherComps(moreInput);
// etc.
回答3:
That notation for arrays and structs is valid only in initializations, so no.
来源:https://stackoverflow.com/questions/8886375/possible-to-initialize-an-array-after-the-declaration-in-c