Escolar Documentos
Profissional Documentos
Cultura Documentos
int main(void) {
struct ponto p;
printf("Digite as coordenadas do ponto(x y): ");
scanf("%f %f", &p.x, &p.y);
printf("Ponto=(%.2f,%.2f)\n", p.x, p.y); Operador de acesso “ponto”
return 0;
}
void imprime(struct ponto p) { p é passado por valor: não é possível alterar a struct
printf("Ponto=(%.2f,%.2f)\n", p.x, p.y); original e pode ser ineficiente (uma cópia da struct é
colocada na pilha)
}
void imprime(struct ponto* pp) { p é passado por referência (ponteiro para struct ponto)
printf("Ponto=(%.2f,%.2f)\n", pp->x, pp->y); Operador de acesso “seta” é equivalente a (*pp).x
}
Alocação dinâmica de estruturas
• Útil quando temos que tratar um conjunto de elementos com muitas informações
typedef struct aluno Aluno;
struct aluno {
int mat;
char nome[81]; O tipo Aluno definido ocupa pelo menos 227 (=4+81+121+21) bytes.
char end[121];
char tel[21];
}; Desperdício significativo de memória caso um número de alunos bem
... inferior ao máximo estimado seja armazenado.
# define MAX 100
...
Aluno tab[MAX];
...
tab[i].mat = 9912222
...
Aluno* tab[MAX];
Vetor de ponteiros: cada elemento do vetor ocupa apenas o espaço
necessário para armazenar um ponteiro.
struct listano {
int info;
ListaNo *prox;
• O último nó da lista armazena, como próximo nó, um ponteiro inválido, };
com valor NULL , sinalizando que não existe um próximo nó
• A lista em si é ser representada por um ponteiro para o primeiro nó
Listas simplesmente encadeadas