2014-01-02 2 views
0

Во-первых, я должен сказать, что у меня очень мало опыта C, и когда я говорю очень мало, я имею в виду около 2 1/2 часа. Поэтому, пожалуйста, простите и исправьте любые неточности, глупости или другие личные недостатки.Инициализация 2-мерного массива структуры с нулевым значением

Вот код, как это в настоящее время составляет:

typedef struct 
{ 
    float n; 
    int x; 
    int y; 
    int values[5]; 
} Cell; 

typedef Cell Grid[10][10]; 

void update(Grid *source) 
{ 
    // This should be a 2D array of Cells. 
    // All the values in the Cell should be 0, 
    // including the contents of the values array. 
    Grid grid; 
} 

Обновление будет называться довольно часто и несколько критичных к производительности, так что я готов пожертвовать читаемость/простота/время кодирования, если это необходимо в интересах представление. Нет, это не преждевременная оптимизация.

Спасибо за любую помощь,

Сэм.

ответ

2

Самый простой и быстрый способ будет memset массив:

memset(grid, 0 sizeof(Cell)*10*10); 

На самом деле размер grid известен во время компиляции, так

memset(grid, 0, sizeof(Grid)); 

должно быть достаточно.

+0

Спасибо, это, кажется, лучший ответ на вопрос, и я буду отмечать его как таковой. Как бы то ни было, я уже пробовал это и пришел к выводу, что он не работает, но при дальнейшем расследовании кажется, что ошибочное поведение, которое демонстрирует код, происходит от другого, пока неизвестного источника. Я продолжу расследование самостоятельно. – SeriousSamP

1

Это инициализирует ваш массив.

Grid grid={0}; 
+0

Проблема в том, что некоторые версии GCC под некоторыми обычно используемыми уровнями предупреждения (например, '-Wall') будут жаловаться на« неполные инициализаторы ». Это не должно, но это так. –

+0

@JonathanLeffler да. Я пробовал с несколькими компиляторами. Я работал нормально. Но, как вы сказали, он не должен давать предупреждения. –

Смежные вопросы