2013-04-26 115 views
1

我有這個問題。我需要有一個浮點數組的數組來存儲,然後我運行一些函數。我怎麼能做到這一點,因爲我不能初始化一個非常數的數組?我應該做一個函數,將與malloc創建該數組,然後返回並分配給一個指針?C初始化數組陣列

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' 
+1

你不需要投將R在C程序中'malloc'的特性值。 – 2013-04-26 15:07:49

回答

3

如果您需要在陣列中存儲在不知道的值編譯時間,是的,你需要一個函數,雖然你只需要通過malloc()分配一個數組,如果th在編譯時,數組的編號的大小爲

所以......如果尺寸和內容在編譯時是已知的,你可以,如果大小是已知的做到這一點...

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

我知道有多少我想創建,當我需要創建這個數組時,我得到了一個int,告訴我要做多少個。但它不是一個常數,我應該使用#3的權利? – 2013-04-26 14:52:09

+0

如果您確切知道您要創建多少個,並且每次都是相同的,則應該使用#2。如果元素的數量將從一次變爲下一次,那麼請使用#3 – 2013-04-26 14:53:20

+0

你是對的。每次都是不一樣的,所以#3。戈納試一試。謝謝 – 2013-04-26 14:55:33