Possible to initialize an array after the declaration in C?

喜你入骨 提交于 2019-11-26 20:48:54

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!