Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CITH

Tamanho de um vetor

Recommended Posts

Minha dúvida é simples.

Gostaria se saber se existe alguma função pré-definida que me retorne o tamanho de um vetor.

Agradeço desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C, para arrays de char, pode utilizar a função strlen. Para outros tipos de arrays, pode utilizar o operador sizeof para calcular o tamanho.

strlen:

http://www.cplusplus.com/reference/cstring/strlen/?kw=strlen

sizeof:

http://www.cplusplus.com/forum/beginner/44048/

http://www.slackbr.org/forum/viewtopic.php?f=43&t=5649

 

Em C++, como o Mnemonic mencionou, os containers possuem métodos para obter o seu tamanho

Exemplo:

http://www.cplusplus.com/reference/vector/vector/size/

http://www.cplusplus.com/reference/list/list/size/

 

Obs.:

Ao Mnemonic, quando se propor a ajudar alguém em suas respostas procure mostrar a pessoa como fazê-lo ou indicar alguma fonte.

Simplesmente dizer que existe e não indicar como, gera respostas que não contribuem com o tópico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C, para arrays de char, pode utilizar a função strlen. Para outros tipos de arrays, pode utilizar o operador sizeof para calcular o tamanho.

strlen:

http://www.cplusplus.com/reference/cstring/strlen/?kw=strlen

sizeof:

http://www.cplusplus.com/forum/beginner/44048/

http://www.slackbr.org/forum/viewtopic.php?f=43&t=5649

 

Em C++, como o Mnemonic mencionou, os containers possuem métodos para obter o seu tamanho

Exemplo:

http://www.cplusplus.com/reference/vector/vector/size/

http://www.cplusplus.com/reference/list/list/size/

 

Obs.:

Ao Mnemonic, quando se propor a ajudar alguém em suas respostas procure mostrar a pessoa como fazê-lo ou indicar alguma fonte.

Simplesmente dizer que existe e não indicar como, gera respostas que não contribuem com o tópico.

 

Olá GBecker.

Eu estou utilizando C. Tentei utilizar o sizeof mas não deu certo, pois estou querendo passar o vetor pra uma função e ela me retornar o tamanho dele. Olha só

 

#include <stdio.h>

int main()
{
    int Vetor[6];

    printf("%d",Test(Vetor));
}

int Test( int *Vetor[] )
{
    return sizeof(*Vetor);
}

Em vez de ele me retornar 24( 6 * 4 ), ele me retorna apenas 4. Acho que ele tá me retornando apenas a quantidade de byte de de 1 elemento do vetor.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto se deve a dois fatos:

 

1. Em C, só é possível passar argumentos por valor, e nunca por referência;

2. Em C, o valor de um vetor é um ponteiro para seu primeiro elemento.

 

No código que você escreveu, a função Test espera um ponteiro para ponteiro para int. Portanto sizeof *Vetor é sinônimo de sizeof (int *), que na sua implementação é igual a 4.

 

Em C, se uma função precisa saber o tamanho de um vetor, é comum usar um parâmetro adicional. Afinal, sempre é possível saber o tamanho de qualquer vetor (se o tamanho for constante, você sabe quando escreve o código; se não for, como é o caso de VLAs, você tem o valor em uma variável, ou outro lvalue qualquer).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isto se deve a dois fatos:

 

1. Em C, só é possível passar argumentos por valor, e nunca por referência;

2. Em C, o valor de um vetor é um ponteiro para seu primeiro elemento.

 

No código que você escreveu, a função Test espera um ponteiro para ponteiro para int. Portanto sizeof *Vetor é sinônimo de sizeof (int *), que na sua implementação é igual a 4.

 

Em C, se uma função precisa saber o tamanho de um vetor, é comum usar um parâmetro adicional. Afinal, sempre é possível saber o tamanho de qualquer vetor (se o tamanho for constante, você sabe quando escreve o código; se não for, como é o caso de VLAs, você tem o valor em uma variável, ou outro lvalue qualquer).

Obrigado por me esclarecer.

Eu já fazia assim como você falou, colocava outro parâmetro pra mandar o tamanho do vetor, mas estava com a dúvida já resolvida. xD

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.