2017-02-12 10 views
0

У меня есть простая:-структураКак использовать тетср инициализировать массив в структурах

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

Я также инициализировать функцию для него, где один аргумента массив из 4 элементов. Как правильно использовать memcpy для инициализации массива в struct? Что-то вроде этого не работает для меня:

struct_type* init_fcn(double array[4]){ 

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

return retVal; 
} 

Я могу инициализация значения один на один, но я thnik тетср будет лучше и быстрее. У вас есть идеи, как правильно это сделать?

+0

О, я вижу, тетср также требует размера массива, который является таким же, как размер уделено таНоса –

+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 (массив) также ошибочно – PSkocik

+0

@PSkocik: заметил прямо сейчас и исправил его; Благодарю. –

+0

Спасибо! Это работает для меня. Итак, первое значение параметра r-> par 'в парном массиве, а' & r-par '- это адрес первого элемента? –