31

実際に初期化する前に、このような変数を宣言する方法はありますか?

    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
    };
4

3 に答える 3

35

配列に割り当てることはできないため、基本的には提案したことを行うことはできませんが、C99 ではこれを行うことができます。

CGFloat *components;
components = (CGFloat [8]) {
    0.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.15
};

この( ){ }演算子は複合リテラル演算子と呼ばれます。これは C99 の機能です。

この例componentsでは、 は配列ではなくポインタとして宣言されていることに注意してください。

于 2012-01-16T21:18:14.240 に答える
12

配列を構造体にラップすると、割り当て可能になります。

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.
于 2012-01-16T21:26:52.603 に答える
0

配列と構造体のその表記法は初期化でのみ有効なので、いいえ。

于 2012-01-16T21:27:46.203 に答える