Inicializar um Array a 0 em C

Satishkumar Bharadwaj 12 outubro 2023
  1. Utilize a função C Biblioteca memset()
  2. Inicializar o Array para valores diferentes de 0
Inicializar um Array a 0 em C

Este tutorial introduz como inicializar um array para 0 em C.

A declaração de um array em C é a que se segue.

char ZEROARRAY[1024];

Torna-se tudo zeros em tempo de execução no âmbito global. Existe um método de abreviatura se for um array local. A declaração e inicialização são as que se seguem.

char ZEROARRAY[1024] = {0};

Se um array for parcialmente inicializado, os elementos que não forem inicializados receberão o valor 0 do tipo de dados relevantes. O compilador irá preencher as entradas não escritas com zeros.

Se não houver inicializador especificado, os objectos com armazenamento estático serão inicializados a 0. A declaração é a que se segue:

static int myArray[10];

Um array é inicializado a 0 se a lista de inicializadores estiver vazia ou 0 é especificado na lista de inicializadores. A declaração é a que se segue:

int number[5] = {};
int number[5] = {0};

A técnica mais simples para inicializar um array é fazer loop através de todos os elementos e defini-los como 0.

#include <stdio.h>

int main(void) {
  int numberArray[10], counter;

  for (counter = 0; counter < 5; counter++) {
    numberArray[counter] = 0;
  }
  printf("Array elements are:\n");
  for (counter = 0; counter < 5; counter++) {
    printf("%d", numberArray[counter]);
  }
  return 0;
}

Resultado:

Array elements are:
00000

Utilize a função C Biblioteca memset()

A função memset() é uma função de biblioteca da string.h. É utilizada para preencher um bloco de memória com um determinado valor.

A sintaxe da função memset() está abaixo.

void *memset(void *pointerVariable, int anyValue, size_t numberOfBytes);

Onde,

  • pointerVariable é uma variável ponteiro para o bloco de memória a preencher.
  • anyValue é o valor a ser definido. Este é um valor inteiro, mas a função preenche o bloco de memória utilizando a conversão de caracteres não assinados deste valor.
  • numberOfBytes é o número de bytes a ser definido para o valor.

Esta função devolve um ponteiro para a área de memória pointerVariable.

O programa completo é o que se segue:

#include <stdio.h>
#include <string.h>

void printArrayvalues(int anyArray[], int anyNumber) {
  int index;
  for (index = 0; index < anyNumber; index++) printf("%d ", anyArray[index]);
}

int main(void) {
  int number = 10;
  int arrayValues[number];

  memset(arrayValues, 0, number * sizeof(arrayValues[0]));
  printf("Array after memset()\n");

  printArrayvalues(arrayValues, number);

  return 0;
}

Resultado:

Array after memset()
0 0 0 0 0 0 0 0 0 0 

Inicializar o Array para valores diferentes de 0

Uma inicialização de um array para valores diferentes de 0 com gcc é como abaixo:

int myArrayValues[1024] = {[0 ... 1023] = -1};

Cada membro de um array pode ser explicitamente inicializado omitindo a dimensão. A declaração é a que se segue:

int myArrayValues[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

O compilador irá deduzir a dimensão da lista de inicializadores e para arrays multidimensionais apenas a dimensão mais externa pode ser omitida.

int myPoints[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

Artigo relacionado - C Array