2017-02-12 104 views
0

陣列I具有簡單的結構:如何使用memcpy初始化以struct

typedef struct{ 
double par[4]; 
}struct_type; 

我還初始化函數爲其,其中一個參數是一個4個元素的數組。如何正確使用memcpy initalize array in struct?這樣的東西不適合我:

struct_type* init_fcn(double array[4]){ 

struct _type* retVal; 
retVal->par=malloc(sizeof(double)*4); 
memcpy(retVal->par,&array); 

return retVal; 
} 

我可以初始化值,但我thnik memcpy會更好,更快。你有什麼想法如何正確做到這一點?

+0

哦,我看到,MEMCPY也需要數組的大小,這是一樣的給予的malloc大小 –

+0

'的sizeof(*雙)'是無稽之談,並會導致在編譯器錯誤。這不是[mcve] – StoryTeller

+0

更像'memcpy(retVal-> par,array,sizeof(double)* 4)'。另外在malloc中,你可以使用'sizeof(double)'(一個元素的大小) –

回答

4

如果你想返回一個指向struct_type類型的新對象的指針,那麼你應該創建一個確切的對象,即使用malloc(sizeof(struct_type))而不是直接爲任何成員分配空間。所以,你的代碼可能如下所示:

struct_type* init_fcn(double array[4]){ 

    struct_type* retVal; 
    retVal = malloc(sizeof(struct_type)); 
    if (retVal) { 
     memcpy(retVal->par,array,sizeof(retVal->par)); 
    } 

    return retVal; 
} 
+0

sizeof(array)也是錯的 – PSkocik

+0

@PSkocik:現在注意並糾正它;謝謝。 –

+0

謝謝!它適合我。所以'par- par'是par數組中的第一個值,'&r-par'是第一個元素的地址? –