Como posso determinar o tamanho da minha matriz em C?

Como posso determinar o tamanho da minha matriz em C?

Ou seja, o número de elementos que a matriz pode conter?

Solução

Síntese executiva:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

Resposta completa:

Para determinar o tamanho do seu array em bytes, você pode utilizar o "tamanho de". operador:

int a[17];
size_t n = sizeof(a);

No meu computador, o ints tem 4 bytes de comprimento, portanto n é 68.

Para determinar o número de elementos da matriz, podemos dividir o tamanho total da matriz pelo tamanho do elemento da matriz. Você poderia fazer isso com o tipo, assim:

int a[17];
size_t n = sizeof(a) / sizeof(int);

e obter a resposta adequada (68 / 4 = 17), mas se o tipo de "a" mudou você teria um bug desagradável se você esquecesse de mudar o tamanho do(int) também.

Portanto, o divisor preferido é sizeof(a[0]), o tamanho do o zeroésimo elemento do conjunto.

int a[17];
size_t n = sizeof(a) / sizeof(a[0]);

Outra vantagem é que agora você pode facilmente parametrizar o nome da matriz em uma macro e obter:

#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))

int a[17];
size_t n = NELEMS(a);
Comentários (20)

Vale a pena notar que "tamanho de" não ajuda quando se lida com um valor de array que decaiu para um ponteiro: mesmo que aponte para o início de um array, para o compilador é o mesmo que um ponteiro para um único elemento desse array. Um ponteiro não "lembra" mais nada sobre o array que foi usado para inicializá-lo.

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
Comentários (4)
sizeof(array) / sizeof(array[0])
Comentários (0)