Как инициализировать элементы динамического массива int в 0 в C - PullRequest
8 голосов
/ 08 января 2012

Я создал динамический массив, и мне нужно инициализировать все члены равными 0. Как это можно сделать в C?

   int* array;
    array = (int*) malloc(n*sizeof(int));

Ответы [ 5 ]

20 голосов
/ 08 января 2012

В этом случае вы бы использовали calloc():

array = (int*) calloc(n, sizeof(int));

Можно с уверенностью предположить, что все системы теперь имеют все нулевые биты в качестве представления для нуля.

§6.2.6.2 гарантирует, что это сработает:

Для любого целочисленного типа, представление объекта, где все биты ноль должен быть представлением значения ноль в этом типе.

Также возможно сделать комбинацию malloc() + memset(), но по причинам, обсуждаемым в комментариях к этому ответу , вероятно, будет более эффективно использовать calloc().

7 голосов
/ 08 января 2012
memset(array, 0, n*sizeof(int));

Или же вы можете выделить свой блок памяти, используя calloc, что сделает это за вас:

array = calloc(n, sizeof(int));

calloc документация:

void * calloc (size_t nmemb, size_t size);

Функция calloc () выделяет память для массива nmemb элементов размер байтов каждый и возвращает указатель на выделенную память.Память установлена ​​на ноль....

4 голосов
/ 08 января 2012

Использование функции calloc ( пример использования ):

int *array = calloc(n, sizeof(int));

С calloc страница для справки :

void *calloc(size_t nelem, size_t elsize);

Функция calloc() должна выделять неиспользуемое пространство для массива nelem элементов, каждый из которых имеет размер elsize в байтах. Пробел должен быть инициализирован для всех битов 0.

0 голосов
/ 08 января 2012
                    for (i=0; i<x; ++i){
                        array[i]=0;
                    }

Это должно сработать.Я предполагаю, что вы должны сделать цикл, который делает 0 для каждого элемента в массиве.Memset также может работать на вас.

0 голосов
/ 08 января 2012
memset(array, 0, n * sizeof *array);
...