Sabemos que para descobrirmos o tamanho de um vetor de char ou String, basta usar o strlen da biblioteca <string.h>. Veja o exemplo:#include <stdio.h> #include <string.h>int main(){ char palavra[10]; strcpy(palavra, "ColaboraTI"); int tamanho; tamanho = strlen(palavra); printf("Tamanho do vetor de string: %d", tamanho); getchar();}Tamanho do vetor de string: 10 Atraves do comando strcpy que tambem e da biblioteca <string.h> e possivel copiar a String para o nosso vetor palavra. E o comando strlen fica responsavel por descobrir o tamanho utilizado da string palavra.Para descobrir o tamanho de um vetor do tipo inteiro declarado em uma mesma funcao, por exemplo, voce precisa usar o comando sizeof da biblioteca <stdio.h> atraves do algoritmo:#include <stdio.h> int main(){ int array[] = { 0, 1, 2, 3, 4, 5, 6 }; printf("Length of array: %d\n", (int)( sizeof(array) / sizeof(array[0]) ));}Entendendo este codigo... Temos um array com 7 posicoes { 0, 1, 2, 3, 4, 5, 6 }. Cada posicao equivale a 4 bits, pois estamos trabalhando com inteiros. Inteiros suportam numeros de ate 4 bits. Como ha 7 posicoes em um vetor de inteiros, o nosso vetor possui 28 bits. Este algoritmo descobre atraves do tamanho do vetor (28 bits) dividido pelo tamanho de cada posicao do vetor (4 bits) que dara 7.Tamanho do vetor: 7 O problema de usar este metodo para descobrir o tamanho do vetor e que ele so funciona com vetores declarados na mesma funcao. Ele nao funciona com vetores declarados em uma funcao local que sao passados por parametro em outra funcao. Nao funciona!Com base nisto descobri alguns metodos que funcionam localmente e que nao funcionam se passados por parametro em outra funcao e metodos que funcionam das duas formas. Na verdade sao 4 metodos para descobrir o tamanho de um vetor que apresento aqui.Vamos la! Veja o codigo:#include <stdio.h>#include <stdlib.h>void metodo1(int arr[]){ printf("\nMetodo 1"); int result = *(&arr+1)-arr; printf("\nMETODO 1 - Resultado *(&arr+1)-arr: %d",result);}void metodo2(int arr[]){ printf("\n\nMetodo 2"); int res = sizeof(*(&arr)); printf("\nResultado sizeof(*(&arr)): %d",res); int resu = sizeof(*(&arr+1)); printf("\nResultado sizeof(*(arr+1)): %d", resu); int tamanho = res/resu; printf("\nMETODO 2 - Resultado de res/resu: %d",tamanho); printf("Numero: %d",(arr));}void metodo3(int arr[]){ printf("\n\nMetodo 3"); int *inicio; int *fim; int count=0; for (inicio = *(&arr), fim = *(&arr+1); inicio<fim; inicio++){ count++; printf("\ninicio: %d",inicio); } printf("\nMETODO 3 - Count eh igual a: %d",count);}void metodo4(int arr[]){ printf("\n\nMetodo 4"); int *n = *(&arr+1); printf("\n\nResultado &arr+1: %d",*n); int *n1 = *(&arr); printf("\nResultado &arr: %d",*n1); int g = n-n1; printf("\n\nMetodo 4- Resultado de n-n1: %d",g);}int main(){ int arr[12] = {1}; int opcao; do{ printf("MENU: "); printf("\n\n1 - Metodo 1"); printf("\n2 - Metodo 2"); printf("\n3 - Metodo 3"); printf("\n4 - Metodo 4"); printf("\nOpcao: "); scanf("%d",&opcao); switch(opcao){ case 1: metodo1(arr); break; case 2: metodo2(arr); break; case 3: metodo3(arr); break; case 4: metodo4(arr); } getchar(); getchar(); system("cls"); }while(opcao!=5); }Bem! O metodo 1 foi proposto nesta pagina How to find size of an array in C without sizeof.Arjun Sreedharan faz todo um estudo sobre como funciona a alocacao de um vetor na memoria. Voce pode se aprofundar se quiser conferindo o artigo dele. O metodo 1 funciona perfeitamente.Metodo 1 METODO 1 - Resultado de *(&arr+1)-arr: