Programação II Vetores de Ponteiro de Estrutura Bruno Feijó Dept. de Informática, PUC-Rio Arrays (vetores) de Ponteiros para Estruturas mat nome AnoRef ... #define N 3 ano semestre Aluno v[N]; Gastaria os bytes relativos a mat, nome e AnoRef Ponteiros são mais eficientes ! Aluno ** v; Requereria alocação dinâmica Como ficaria a liberação de memória ? ... faça depois esta opção int main(void) { Aluno * v[N]; ... for (i=0;i<N;i++) lê matrícula, ano, semestre, nome chama função criaAluno que retorna valor para v imprime v libera memória (e exibe mensagem) return 0; } Exemplo de Vetor de Ponteiros para Estruturas - Alunos Se for char * nome; requer malloc e strcpy, pois malloc(sizeof(Aluno)) só criaria espaço para ponteiro ... includes struct anoRef { int ano; int semestre; }; typedef struct anoRef AnoRef; struct aluno { int mat; char nome[81]; AnoRef anoIn; }; typedef struct aluno Aluno; #define N 3 ... Protótipos int main(void) { Aluno * v[N]; int i, mat, ano, sem; char s[81]; for (i=0;i<N;i++) { scanf ("%d %d %d %80[^\n]",&mat,&ano,&sem,s); v[i] = criaAluno(mat,s,ano,sem); } printf("Matricula, Nome, Ano e Semestre:\n"); imprimeTudo(N,v); liberaAlunos(N,v); return 0; } void imprimeTudo(int n, Aluno ** v) { int i; for (i=0; i<n; i++) printf("%d %s %d %d\n",v[i]->mat,v[i]->nome,v[i]->anoIn.ano,v[i]->anoIn.semestre); } void liberaAlunos(int n, Aluno ** v) { int i; for (i=0; i<n; i++) free(v[i]); printf("Todos os alunos liberados\n"); } Exemplo de Vetor de Ponteiros para Estruturas - Alunos Aluno * criaAluno(int mat, char * s, int ano, int sem) { Aluno * p; p = (Aluno *)malloc(sizeof(Aluno)); if (p == NULL) return NULL; p->mat = mat; strcpy(p->nome,s); p->anoIn.ano = ano; p->anoIn.semestre = sem; return p; }