#include #include int* addVet(int* v, int* endSize, int* endMaxSize, int e){ if(*endSize < *endMaxSize){ //cabe v[*endSize] = e; *endSize = *endSize + 1; return v; }else{ //nao cabe, entao dobra o tamanho int tamanhoAtual = *endMaxSize; int *vaux = (int*) malloc(2 * tamanhoAtual * sizeof(int)); //copia do vetor antigo para o novo for(int i = 0; i < *endSize; i++){ vaux[i] = v[i]; } vaux[*endSize] = e; *endSize = *endSize + 1; *endMaxSize = 2 * tamanhoAtual; //libera a memoria do vetor antigo free(v); //retorna o novo endereco de memoria return vaux; } } void printVet(int *v, int size, int maxSize){ printf("Vetor tem %d elementos, e %d de tamanho alocado.\n", size, maxSize); for(int i = 0; i < size; i++){ printf("%d , ", v[i]); } printf("\n"); return; } int * initVet(int *endSize, int *endMaxSize){ int * v1 = (int*) malloc(4 * sizeof(int)); *endSize = 0; *endMaxSize = 4; return v1; } int main(int argc, char * argv[]){ int size; int maxSize; int * vet; vet = initVet(&size, &maxSize); printVet(vet, size, maxSize); vet = addVet(vet, &size, &maxSize, 3); printVet(vet, size, maxSize); vet = addVet(vet, &size, &maxSize, 4); printVet(vet, size, maxSize); vet = addVet(vet, &size, &maxSize, 11); printVet(vet, size, maxSize); vet = addVet(vet, &size, &maxSize, 13); printVet(vet, size, maxSize); vet = addVet(vet, &size, &maxSize, 21); printVet(vet, size, maxSize); vet = addVet(vet, &size, &maxSize, 27); free(vet); return 0; }