Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Possible to initialize an array after the declaration in C?

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     }; 
like image 528
RyJ Avatar asked Jan 16 '12 21:01

RyJ


People also ask

Can we initialize array after declaration?

We declare an array in Java as we do other variables, by providing a type and name: int[] myArray; To initialize or instantiate an array as we declare it, meaning we assign values as when we create the array, we can use the following shorthand syntax: int[] myArray = {13, 14, 15};

Can an array be initialized in the declaration in C?

Arrays may be initialized when they are declared, just as any other variables.

Is it necessary to initialize the array at the time of declaration?

It is necessary to initialize the array at the time of declaration. This statement is false.


2 Answers

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.

like image 106
ouah Avatar answered Sep 28 '22 20:09

ouah


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. 
like image 22
dreamlax Avatar answered Sep 28 '22 20:09

dreamlax