C初始化数组数组

我有这个问题。 在运行某些函数之前,我需要存储一个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; } 

然后在我class上:

 graphColors *gc; gc = initializeGraphColors(); 

得到此错误:

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

如果在编译时不知道您需要存储在数组中的值,是的,您需要一个函数,但如果在编译时数组的大小未知,则只需通过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 ); } } }