简体   繁体   中英

C initializing array of arrays

I have this problem. I need to have an array of float arrays to store before i run some functions. How can i accomplish that, since i cannot initialize an array withut a non constant? Should i make a function that will create that array with malloc then return in and assign to a pointer?

typedef struct
{
    float RGBA[4];
} graphColors;

I need to have an array of grapColors. I'm sorry for my lack of knowledge, im a Java programmer and need to work with C now.

EDIT:

graphColors *initializeGraphColors(){
    graphColors *gp;
    int i;
    float HI = 1.0f;
    float LO = 0.0f;

    float temp[] = {1.0f, 1.0f, 1.0f, 0.0f};
    gp = (graphColors *) malloc(nrOfLines * sizeof(graphColors));

    for(i = 0;i < nrOfLines; i++){
        gp[i].RGBA[0] = LO + (float)rand()/((float)RAND_MAX/(HI-LO));
        gp[i].RGBA[1] = LO + (float)rand()/((float)RAND_MAX/(HI-LO));
        gp[i].RGBA[2] = LO + (float)rand()/((float)RAND_MAX/(HI-LO));
        gp[i].RGBA[3] = 0.0f;
    }
    return gp;
}

Then in my class:

graphColors *gc;
gc = initializeGraphColors();

Getting this error:

error C2040: 'gc' : 'graphColors *' differs in levels of indirection from 'graphColors'

If the values you need to store in the array are not known at compile time, yes, you would need a function though you would only have to allocate an array via malloc() if the size of the array is unknown at compile time.

So... if the size and the content is known at compile time, you can do this...

#define NUM_ELEMENTS 2

typedef struct
{
    float RGBA[4];
} graphColors;

graphColors array[NUM_ELEMENTS] =
{
    { 1.0, 0.4, 0.5, 0.6 },
    { 0.8, 0.2, 0.0, 1.0 }
}

If the size is known, but not the values, you can do this...

#define NUM_ELEMENTS 2

typedef struct
{
    float RGBA[4];
} graphColors;

graphColors array[NUM_ELEMENTS];

void InitGraph()
{
    for( int i = 0; i < NUM_ELEMENTS; i++ )
    {
        for( int j = 0; j < 4; j++ )
        {
           array[i][j] = GetValue( i, j );
        }
    }
 }

If you don't know the size or the content until runtime, you can approach it this way...

typedef struct
{
    float RGBA[4];
} graphColors;

graphColors* array = NULL;

void InitGraph( int num_elements )
{
    array = malloc( sizeof( graphColors ) * num_elements );

    if( !array )
    {
       printf( "error\n" );
       exit( -1 );
    }

    for( int i = 0; i < num_elements; i++ )
    {
        for( int j = 0; j < 4; j++ )
        {
           array[i][j] = GetValue( i, j );
        }
    }
 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM