инициализировать массив внутри структуры в C - PullRequest
5 голосов
/ 07 апреля 2011
struct myStruct
{   
    short int myarr[1000];//want to initialize all elements to 0
}

Как инициализировать массив?

Я пытался сделать short int* myarr[1000]={0} внутри структуры, но это неправильно. Как я могу это сделать? Я не против сделать это в файле реализации. Эта структура содержится в заголовочном файле.

Ответы [ 4 ]

3 голосов
/ 07 апреля 2011

Используйте универсальный инициализатор: {0}.

Универсальный инициализатор работает для чего угодно и инициализирует элементы до 0 (NULL для указателей, 0 для целых, 0.0 для двойных, ...):

struct myStruct example1 = {0};
struct myStruct example2[42] = {0};
struct myStruct *example3 = {0};

Редактировать для динамически размещаемых объектов.

Если вы выделяете память динамически, используйте calloc вместо malloc.

p = malloc(nelems * sizeof *p); /* uninitialized objects; p[2] is indeterminate */
q = calloc(nelems, sizeof *q);  /* initialized to zero; q[2] is all zeros */

С помощью realloc (и, возможно, других ситуаций) вам необходимо memset.

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

Просто инициализируйте экземпляр структуры с {0}, это также обнулит ваш массив. В качестве альтернативы, используйте memset, как демонстрирует NKCSS.

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

Если он объявлен вне функции (не в стеке), вся структура будет обнулена во время компиляции.

В противном случае, вы можете использовать memset после его объявления.

0 голосов
/ 07 апреля 2011

int не являются ссылочными типами, они не инициализируются после выделения памяти для вашей структуры?

Вы могли бы просто сделать это: memset (& myStruct, 0, sizeof (myStruct));

...