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
中声明为指针而不是数组.
如果将数组包装在结构中,它将变为可赋值.
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)