実際に初期化する前に、このような変数を宣言する方法はありますか?
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
};
配列に割り当てることはできないため、基本的には提案したことを実行できませんが、C99ではこれを実行できます。
CGFloat *components;
components = (CGFloat [8]) {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
( ){ }
演算子は複合リテラル演算子と呼ばれます。 C99の機能です。
この例では、components
は配列ではなくポインタとして宣言されていることに注意してください。
配列を構造体でラップすると、割り当て可能になります。
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
構造体を返すこともできます。つまり、構造体を初期化して割り当てる構造体を作成できます。次に例を示します。
Components comps = SomeFunction(inputData);
DoSomethingWithComponents(comps);
comps = GetSomeOtherComps(moreInput);
// etc.
配列と構造体の表記は初期化でのみ有効であるため、無効です。