Скажем, я хочу инициализировать myArray
char myArray[MAX] = {0};
char myArray[MAX] = {0,};
char myArray[MAX]; memset(myArray, 0, MAX);
Все ли они равны или предпочтительнее других?
Спасибо
Скажем, я хочу инициализировать myArray
char myArray[MAX] = {0};
char myArray[MAX] = {0,};
char myArray[MAX]; memset(myArray, 0, MAX);
Все ли они равны или предпочтительнее других?
Спасибо
Они эквивалентны сгенерированному коду (по крайней мере, в оптимизированных сборках), поскольку, когда массив инициализируется синтаксисом {0}
, все значения, которые явно не указаны, неявно инициализируются с помощью 0, и компилятор будет достаточно знать, чтобы вставить вызов memset
.
Единственное различие, таким образом, является стилистическим. Выбор будет зависеть от используемого вами стандарта кодирования или ваших личных предпочтений.
Собственно, я лично рекомендую:
char myArray[MAX] = {};
Все они делают то же самое, но мне это нравится лучше; это наиболее красноречиво. = D
Кстати, обратите внимание, что char myArray[MAX] = {1};
делает не инициализировать все значения до 1! Он только инициализирует первое значение равным 1, а остальное - нулю. Из-за этого я рекомендую вам не писать char myArray[MAX] = {0};
, поскольку он немного вводит в заблуждение для некоторых людей, хотя он работает правильно.
Я думаю, что первое решение лучше всего.
char myArray[MAX] = {0}; //best of all
Можно либо использовать
Но я чувствую, что ниже понятнее и читабельнее.
char myArray[MAX];
memset(myArray, 0, MAX);
Предполагая, что вы всегда хотите инициализировать с помощью 0.
- > Ваш первый способ и второй способ - то же самое. Я предпочитаю 1-й.
- > Третий способ memset()
должен использоваться, если вы хотите назначить 0s, кроме инициализации.
- > Если этот массив, как ожидается, будет инициализирован только один раз, вы можете поставить перед ним ключевое слово static
, чтобы компилятор выполнил задание для вас (без накладных расходов)
Вы также можете использовать bzero fn (записать нулевые байты)
#include <strings.h>
void bzero(void *s, size_t n)