Agora que ja vimos os conceitos e como funciona a alocacao dinamica, estamos prontos para ver um codigo exemplo. Entao vamos a ele.#include <stdio.h>#include <stdlib.h> int ler_int(){ int digitado; printf("Digite um valor inteiro: "); scanf("%d",&digitado); return digitado;} void mostra_int(int num){ printf("%d ",num);} void exibe_vetor(int* vet, int tamanho){ int i; printf("\n"); for(i = 0; i < tamanho; i++) mostra_int(vet[i]); printf("\n\n");} int* preenche_vet_int(int tamanho){ int *vet=0, i; vet = (int *) malloc (tamanho * sizeof(int)); if (vet){ printf("\nPREENCHENDO O VETOR:\n"); for(i = 0; i < tamanho; i++) vet[i] = ler_int(); } return vet;} int aumenta_vet_int(int* vet, int* tamanho, int incremento){ int novo_tam, i; novo_tam = *tamanho + incremento; vet = (int *) realloc (vet, novo_tam * sizeof(int)); if (vet){ printf("\nPREENCHENDO OS NOVOS ITENS DO VETOR:\n"); for(i = *tamanho; i < novo_tam; i++) vet[i] = ler_int(); *tamanho = novo_tam; return 1; } else{ printf("NAO FOI POSSIVEL AUMENTAR O VETOR!\n"); return 0; }} int diminui_vet_int(int* vet, int* tamanho, int decremento){ int novo_tam, i; novo_tam = *tamanho - decremento; if (novo_tam <= 0){ printf("DECREMENTO INFORMADO INVALIDO!!! NAO FOI POSSIVEL DIMINUIR O VETOR!\n"); return 0; } vet = (int *) realloc (vet, novo_tam * sizeof(int)); if (vet){ *tamanho = novo_tam; return 1; } else{ printf("NAO FOI POSSIVEL DIMINUIR O VETOR!\n"); return 0; }} int main(){ int *vetor, tamanho, incremento, decremento; printf("Digite o tamanho do vetor:\n"); tamanho = ler_int(); vetor = preenche_vet_int(tamanho); if (vetor){ exibe_vetor(vetor, tamanho); printf("Digite o quanto deseja aumentar o vetor:\n"); incremento = ler_int(); if (aumenta_vet_int(vetor, &tamanho, incremento)) exibe_vetor(vetor, tamanho); printf("Digite o quanto deseja diminuir o vetor:\n"); decremento = ler_int(); if (diminui_vet_int(vetor, &tamanho, decremento)) exibe_vetor(vetor, tamanho); free(vetor); } else printf("NAO FOI POSSIVEL ALOCAR O VETOR!\n"); system("pause");}Depois do que ja vimos nos post anteriores, este codigo ficou muito simples.Algumas funcoes ja sao conhecidas nossas. E dentre as novas funcoes existe pouca coisa que ainda nao foi dita.A primeira funcao nova esta na linha 25, e e a razao desta sequencia de posts. E uma funcao que retorna um vetor. Um detalhe interessante dela e que damos ao usuario a liberdade de definir o tamanho deste vetor. Seu funcionamento e simples.Declaramos um ponteiro para inteiros vet e o inicializamos com o valor 0. Este ponteiro ira armazenar o endereco do vetor que sera alocado dinamicamente.Fazemos uma chamada a funcao malloc com o tamanho definido pelo usuario, e atribuimos o seu retorno ao ponteiro vet.Se a chamada teve sucesso e o vetor foi alocado, imediatamente vamos preenche-lo.Observe o uso do if sem nenhum operador relacional. Na verdade ele verifica o valor de vet. Por isso o inicializamos com 0. Se a funcao malloc falhou, o valor de vet ainda sera 0 (se funcionar perfeitamente, malloc nunca retorna um endereco 0). Este if verifica se o valor de vet e diferente de 0 (cuidado com isto: por diferente entenda qualquer outro valor, inclusive negativo). Este uso do if e muito comum, e passaremos a usa-lo, sempre que possivel, daqui pra frente, como pode ser visto nas linhas 84 e 88, onde ele avalia o valor retornado pelas funcoes que aumentam e diminuem o tamanho do vetor, respectivamente.A segunda nova funcao, na