Инициализация массива с {0}, {0,}? - PullRequest
31 голосов
/ 08 апреля 2011

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

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

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

Спасибо

Ответы [ 6 ]

32 голосов
/ 08 апреля 2011

На самом деле, я лично рекомендую:

char myArray[MAX] = {};

Они все делают одно и то же, но мне этот больше нравится;это самый лаконичный= D

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

21 голосов
/ 08 апреля 2011

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

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

4 голосов
/ 08 апреля 2011

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

char myArray[MAX] = {0};  //best of all
1 голос
/ 08 апреля 2011

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

-> Ваш первый и второй путь одинаковы.Я предпочитаю 1st.

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

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

1 голос
/ 08 апреля 2011

Любой из них может быть использован

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

  char myArray[MAX]; 
  memset(myArray, 0, MAX);
0 голосов
/ 01 января 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...