2017-01-23 1 views
2

Я пытаюсь инициализировать массив структур в ноль. По какой-то причине я получаю сообщение об ошибке «ожидаемое выражение». Что случилось с моим кодом?Инициализация массива структур

struct mystruct { 
    double a; 
    double arr[2]; 
} 

int main() { 
    struct mystruct *array = (struct mystruct*)malloc(3 * sizeof(struct mystruct)); 
    for (int i = 0; i < 3; i++) { 
     array[i] = { 0 }; 
    } 
    return 0; 
} 
+0

Вы забыли запятую: -S –

+0

Упс, исправлено, но нет Я не забыл точку с запятой в действительном коде. –

+0

Рассмотрите возможность использования 'calloc' вместо' malloc'. –

ответ

2

Ваш код имеет синтаксическую ошибку. Существуют различные способы, чтобы исправить это:

  • Используя синтаксис C99 для составных литералов:

    array[i] = (struct mystruct){ 0 }; 
    
  • Используя отдельную структуру со значениями по умолчанию:

    struct mystruct def = { 0 }; 
    ... 
    array[i] = def; 
    
  • Инициализация каждого член явно:

    array[i].a = 0; 
    array[i].arr[0] = 0; 
    array[i].arr[1] = 0; 
    
  • calloc() Использование:

    struct mystruct *array = calloc(3, sizeof(*array)); 
    

    calloc() инициализирует блок памяти для всех битов нулевыми. Если ваша система использует представление IEEE для double, все биты нуль соответствуют значению 0.0. Если это не так, я дам вам один доллар.

3

Совокупная инициализация доступна только для хорошо ... инициализации:

struct mystruct x = {0}; // initialization 

Там нет такой грамматики для задания.

Но вам не нужно, используйте calloc вместо malloc для динамически распределенной, обнуленной памяти.

struct mystruct* array = calloc(3, sizeof(struct mystruct)); 
Смежные вопросы