как лучше всего инициализировать массив, «memset» или «{// value}»? - PullRequest
1 голос
/ 17 июня 2020
int main(){

int ar[50]={1};

//OR

int br[50];

memset(br, 1, sizeof(br)); 

return 0;

}

Ответы [ 2 ]

2 голосов
/ 17 июня 2020

предположим, что вы делаете

int ar[50] = {-1};

Теперь вы ожидаете, что эта строка инициализирует все элементы массива с -1, но этого не произойдет. Он установит только первый элемент массива в -1, а остальные в 0. Тогда как memset покажет ожидаемое поведение.

См. Это Инициализация всех элементов массива одним значением по умолчанию в C ++? для получения дополнительной информации.

давайте возьмем пример: -

int arr[5] = { 1, 2 }; // this will initialize to 1,2,0,0,0



int ar[5] = {  }; // this will  initialize  all elements 0



int myArray[10] = {}; // his will also all elements 0 in C++ not in c

Итак, если вы хотите инициализировать определенное c значение для массива, используйте memset ().

Если вы хотите инициализировать все элементы в массиве до 0, используйте

static int myArray[10]; // all elements 0

Потому что объекты с длительностью хранения c будут инициализированы до 0, если инициализатор не указан, и он более переносимый, чем memset ().

Кроме того, int ar[50]={0}; будет бесконечным, потому что он просто инициализирует массив и не имеет окончания, но в memset(arr,0,sizeof(br)) он имеет правильный способ завершения l oop в массивах

0 голосов
/ 17 июня 2020
int ar[50]={1};

Это установит только первый элемент в 1. Остальное все будет 0.

memset(br, 1, sizeof(br));

Это установит все байты в br на 1. Это не то же самое, что установка всех значений на 1 . Следующие значения следующие:

{16843009, 16843009, 16843009, 16843009, 16843009}

Используйте memset, если вы знаете, что вам это действительно нужно. Он не совсем предназначен для инициализации массивов, он просто устанавливает в памяти конкретное значение.

Лучший способ в C ++? Используйте std::fill или std::fill_n.

Пример:

int array[5];
std::fill(array, array + 5, 8);

Теперь массив содержит:

{8, 8, 8, 8, 8}

Использование fill_n

std::fill_n(array, 5, 99);

Теперь массив содержит:

{99, 99, 99, 99, 99}

В качестве примечания, предпочитайте использовать std::array вместо массивов в стиле c.

Примерка Godbolt: https://godbolt.org/z/DmgTGE

Ссылки:
[1]: Инициализация массива
[2]: memset do c

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