Nic*_*pot 4 c arrays initialization
我有这个问题。在运行某些函数之前,我需要存储一组浮点数组。我怎样才能做到这一点,因为我无法初始化没有非常量的数组?我应该创建一个函数来使用 malloc 创建该数组然后返回并分配给一个指针吗?
typedef struct
{
float RGBA[4];
} graphColors;
Run Code Online (Sandbox Code Playgroud)
我需要有一组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;
}
Run Code Online (Sandbox Code Playgroud)
然后在我的课上:
graphColors *gc;
gc = initializeGraphColors();
Run Code Online (Sandbox Code Playgroud)
收到此错误:
error C2040: 'gc' : 'graphColors *' differs in levels of indirection from 'graphColors'
Run Code Online (Sandbox Code Playgroud)
如果您需要存储在数组中的值在编译时未知,是的,您将需要一个函数,但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 }
}
Run Code Online (Sandbox Code Playgroud)
如果已知大小,但不知道值,则可以执行此操作...
#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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您直到运行时才知道大小或内容,您可以通过这种方式来处理它...
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 );
}
}
}
Run Code Online (Sandbox Code Playgroud)