Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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á.
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.
>
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.
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).
>
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
Depende da implementação desse vetor.
Se for apenas um array simples em C, não.
Se for algum container em C++, sim.