que - Posible inicializar una matriz después de la declaración en C?
punteros c++ (3)
¿Hay una manera de declarar una variable como esta antes de inicializarla?
CGFloat components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Me gustaría que declarara algo como esto (excepto que esto no funciona):
CGFloat components[8];
components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Esa notación para matrices y estructuras solo es válida en las inicializaciones, por lo que no.
No puede asignar a matrices, así que básicamente no puede hacer lo que propone pero en C99 puede hacer esto:
CGFloat *components;
components = (CGFloat [8]) {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
El operador ( ){ }
se llama operador literal compuesto . Es una característica de C99.
Tenga en cuenta que en este ejemplo los components
se declaran como un puntero y no como una matriz.
Si envuelve su matriz en una estructura, se convierte en asignable.
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;
Si utiliza este enfoque, también puede devolver las estructuras de Components
desde métodos, lo que significa que puede crear funciones para inicializar y asignar a la estructura, por ejemplo:
Components comps = SomeFunction(inputData);
DoSomethingWithComponents(comps);
comps = GetSomeOtherComps(moreInput);
// etc.