una que punteros programacion multidimensionales matriz matrices llenar imprimir generar declaracion como c variable-declaration

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.