[Prévia cron] [Próxima Cron] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto] [Índice de autor]

Re: vetores no struct



Rogério:

>Como que eu uso vetores em struct? Posso colocar sigla[6], como um
parâmetro do struct? Ou apontador para fazer alocação dinâmica? Nesse caso,
como que eu "abro" o struct em suas partes (p. ex. disciplina.sigla[1])?

    Você pode usar os dois approaches. É perfeitamente legal declarar um
vetor estático (com dimensões conhecidas no compile-time) dentro de uma
estrutura (aliás, assim como qualquer outro tipo). Você também pode colocar
um pointer, e alocar o vetor dinamicamente. Acho que as principais vantagens
e desvantagens de cada um são:

vetor/matriz estático: mais fácil de implementar, mas tem tamanho limitado,
e cada instância da struct vai ser enorme, isto é, do tamanho total de seus
componentes (incluindo os vetores).

vetor/matriz dinâmico: você tem de alocar e desalocar a memória manualmente,
mas em compensação é a forma mais eficiente, com menor desperdício de
memória. Dá mais trabalho.

    Quanto à forma de usar, é o que você falou mesmo:

struct {
  int Vetor1[50];
  int *Vetor2;
} teste;

teste.Vetor1[0] = 5;

teste.Vetor2 = (int*) malloc(50*sizeof(int));
if (teste.Vetor2) {
  teste.Vetor2[0] = 5;
  free(teste.Vetor2);
}

Rubens