4

この問題があります。関数を実行する前に、float 配列の配列を格納する必要があります。非定数なしで配列を初期化できないため、どうすればそれを達成できますか? その配列を malloc で作成し、次に戻ってポインターに代入する関数を作成する必要がありますか?

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

grapColors の配列が必要です。私は Java プログラマーであり、今 C で作業する必要があります。

編集:

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

次に、私のクラスで:

graphColors *gc;
gc = initializeGraphColors();

このエラーの取得:

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

1 に答える 1

6

配列に格納する必要がある値がコンパイル時に不明な場合、はい、配列のサイズがコンパイル時に不明なmalloc()場合にのみ配列を割り当てる必要がありますが、関数が必要になります。

したがって...コンパイル時にサイズと内容がわかっている場合は、これを行うことができます...

#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 }
}

サイズはわかっているが値がわからない場合は、これを行うことができます...

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

実行時までサイズやコンテンツがわからない場合は、この方法でアプローチできます...

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 );
        }
    }
 }
于 2013-04-26T14:50:09.337 に答える