Подтвердить что ты не робот

Инициализация массива с {0}, {0,}?

Скажем, я хочу инициализировать myArray

char myArray[MAX] = {0};  
char myArray[MAX] = {0,};  
char myArray[MAX]; memset(myArray, 0, MAX);  

Все ли они равны или предпочтительнее других?

Спасибо

4b9b3361

Ответ 1

Они эквивалентны сгенерированному коду (по крайней мере, в оптимизированных сборках), поскольку, когда массив инициализируется синтаксисом {0}, все значения, которые явно не указаны, неявно инициализируются с помощью 0, и компилятор будет достаточно знать, чтобы вставить вызов memset.

Единственное различие, таким образом, является стилистическим. Выбор будет зависеть от используемого вами стандарта кодирования или ваших личных предпочтений.

Ответ 2

Собственно, я лично рекомендую:

char myArray[MAX] = {};

Все они делают то же самое, но мне это нравится лучше; это наиболее красноречиво. = D

Кстати, обратите внимание, что char myArray[MAX] = {1}; делает не инициализировать все значения до 1! Он только инициализирует первое значение равным 1, а остальное - нулю. Из-за этого я рекомендую вам не писать char myArray[MAX] = {0};, поскольку он немного вводит в заблуждение для некоторых людей, хотя он работает правильно.

Ответ 3

Я думаю, что первое решение лучше всего.

char myArray[MAX] = {0};  //best of all

Ответ 4

Можно либо использовать

Но я чувствую, что ниже понятнее и читабельнее.

  char myArray[MAX]; 
  memset(myArray, 0, MAX);

Ответ 5

Предполагая, что вы всегда хотите инициализировать с помощью 0.

- > Ваш первый способ и второй способ - то же самое. Я предпочитаю 1-й.

- > Третий способ memset() должен использоваться, если вы хотите назначить 0s, кроме инициализации.

- > Если этот массив, как ожидается, будет инициализирован только один раз, вы можете поставить перед ним ключевое слово static, чтобы компилятор выполнил задание для вас (без накладных расходов)

Ответ 6

Вы также можете использовать bzero fn (записать нулевые байты)

#include <strings.h>
void bzero(void *s, size_t n)

http://linux.die.net/man/3/bzero