可以在C语句中声明后初始化数组吗?

RyJ*_*RyJ 28 c variable-declaration

有没有办法在实际初始化之前声明这样的变量?

    CGFloat components[8] = {
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.15
    };
Run Code Online (Sandbox Code Playgroud)

我想它声明这样的东西(除了这不起作用):

    CGFloat components[8];
    components[8] = {
        0.0, 0.0, 0.0, 0.0,
        0.0, 0.0, 0.0, 0.15
    };
Run Code Online (Sandbox Code Playgroud)

oua*_*uah 31

你不能分配到数组,所以基本上你不能做你的建议,但在C99你可以这样做:

CGFloat *components;
components = (CGFloat [8]) {
    0.0, 0.0, 0.0, 0.0,
    0.0, 0.0, 0.0, 0.15
};
Run Code Online (Sandbox Code Playgroud)

( ){ }运算符称为化合物字面操作者.这是一个C99功能.

请注意,在此示例components中声明为指针而不是数组.

  • C++ 不支持 @ArchLinuxTux 复合文字(一些编译器支持它作为扩展)。 (2认同)

dre*_*lax 8

如果将数组包装在结构中,它将变为可赋值.

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;
Run Code Online (Sandbox Code Playgroud)

如果使用此方法,还可以Components从方法返回结构,这意味着您可以创建函数来初始化并分配给结构,例如:

Components comps = SomeFunction(inputData);

DoSomethingWithComponents(comps);

comps = GetSomeOtherComps(moreInput);

// etc.
Run Code Online (Sandbox Code Playgroud)