Calcular o tamanho de um vetor

Em diversas situações de manipulação de um vetor é preciso saber o tamanho desse vetor (saber quantos elementos cabem no vetor) para a operação. Nessas situações é comum ter uma variável que recebe o tamanho do vetor, ou que é incrementada conforme valores são fornecidos. Mas existem situações na qual não se tem esse valor ou é melhor descobrir esse valor ou invés de solicitar (como eu exemplifico mais adiante).

Considerando inicialmente descobrir o tamanho do vetor quando esse vetor é um vetor de caracteres (uma string). Para as strings existe uma função que retorna o tamanho da string, que é a função strlen(). Para essa função, basta informar o vetor de caracteres e ela retorna a quantidade de caracteres, embora isso não seja realmente o tamanho do vetor (o tamanho do texto armazenado pode ser menor do que o tamanho do vetor). O código abaixo ilustra a utilização da strlen().

#include <stdio.h>

int main() {
    char nome[] = "benjamin";
    int len = strlen(nome);

    printf("%i", len);
}

O código abaixo é o código que realmente retorna o tamanho do vetor, seja ele de caracteres ou de valores numéricos. No código eu deixo comentada a linha 5 com o cálculo sizeof(var)/sizeof(int). Isso porque eu prefiro o cálculo feito na linha 6, embora seja mais fácil de explicar com o cálculo que não utilizei.

A função sizeof(var) retorna o tamanho alocado na memória para aquela variável de vetor var. Ou seja, essa função sozinha não retorna quantos elementos cabem no vetor e sim número de bytes que a variável ocupa. Por isso é feita a divisão por sizeof(int). Uma vez que o vetor var é um vetor de inteiros, saber quantos bytes ocupa um inteiro fará com que o resultado da divisão seja a quantidade de elementos do vetor. Eu prefiro utilizar como denominador a chamada da função sizeof(var[0]) (como feito na linha 6) porque ela independe de saber qual o tipo da variável na declaração do vetor. Como o resultado é o mesmo, não se corre o risco de precisar alterar o tipo de vetor e esquecer de alterar o tipo no denominador.

#include <stdio.h>

int main() {
    int var[] = {1, 2, 3, 4, 5, 0};
    //int len = sizeof(var)/sizeof(int);
    int len = sizeof(var)/sizeof(var[0]);

    printf("%i", len);
}

Acho que o uso mais comum de precisar saber o tamanho do vetor está associado com a elaboração de funções. Na função zeraVetor1() apresentada abaixo, é solicitada como parâmetros o vetor e si e o tamanho desse vetor. Ou seja, para chamar essa função será sempre necessário fornecer esses dois parâmetros, o que torna o uso da função mais burocrático. Considerando a necessidade de zerar um vetor chamado var com 9 posições, a chamada da função fica: zeraVetor1(var, 9);

void zeraVetor1(floar vetor[], int tam) {
    int i;
    for (i=0; i<tam; i++) {
        vetor[i] = 0;
    }
}

Considero melhor a definição da função zeraVetor2(), que solicita apenas o vetor e calcula seu tamanho, facilitando a utilização. Agora, para zerar o vetor var de 9 posições, a chamada da função é: zeraVetor2(var);

void zeraVetor2(floar vetor[]) {
    int i, tam = sizeof(vetor)/sizeof(vetor[0]);
    for (i=0; i<tam; i++) {
        vetor[i] = 0;
    }
}

Share

Deixe um comentário

O seu endereço de e-mail não será publicado.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.