且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

ç初始化数组的数组

更新时间:2022-10-15 16:59:23

如果您需要在阵列中存储在编译时是不知道的价值观,是的,你需要一个功能,虽然你将只需要分配一个数组通过的malloc()如果数组的尺寸在编译时未知的。

所以...如果大小和内容在编译时是已知的,你可以做到这一点...

 的#define NUM_ELEMENTS 2typedef结构
{
    浮RGBA [4];
} graphColors;graphColors阵列[NUM_ELEMENTS] =
{
    {1.0,0.4,0.5,0.6}
    {0.8,0.2,0.0,1.0}
}

如果大小是已知的,但不是值,你可以这样做......

 的#define NUM_ELEMENTS 2typedef结构
{
    浮RGBA [4];
} graphColors;graphColors阵列[NUM_ELEMENTS]无效InitGraph()
{
    的for(int i = 0; I< NUM_ELEMENTS;我++)
    {
        为(中间体J = 0; J&下; 4; J ++)
        {
           数组[I] [J] =的GetValue(I,J);
        }
    }
 }

如果您不知道大小或内容,直到运行时,你可以接近它这样...

  typedef结构
{
    浮RGBA [4];
} graphColors;graphColors *阵列= NULL;无效InitGraph(INT num_elements)
{
    阵列=的malloc(sizeof的(graphColors)* num_elements);    如果(!数组)
    {
       的printf(错误。\\ n);
       出口(-1);
    }    的for(int i = 0; I< num_elements;我++)
    {
        为(中间体J = 0; J&下; 4; J ++)
        {
           数组[I] [J] =的GetValue(I,J);
        }
    }
 }

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 );
        }
    }
 }