uma estrutura. Vamos ver como poderia ser declarado umponteiro para as estruturas de ficha que estamos usando nestas secoes:struct ficha_pessoal *p;Os ponteiros para uma estrutura funcionam como os ponteiros para qualquer outro tipode dados no C. Para usa-lo, haveria duas possibilidades. A primeira e aponta-lo para umavariavel struct ja existente, da seguinte maneira:struct ficha_pessoal ficha;struct ficha_pessoal *p;p = &ficha;A segunda e alocando memoria para ficha_pessoal usando, por exemplo, malloc():#include <stdlib.h>main(){struct ficha_pessoal *p;int a = 10; /* Faremos a alocacao dinamica de 10 fichas pessoais */p = (struct ficha_pessoal *) malloc (a * sizeof(struct ficha_pessoal));p[0].telefone = 3443768; /* Exemplo de acesso ao campo telefone da primeiraficha apontada por p */free(p);}Ha mais um detalhe a ser considerado. Se apontarmos o ponteiro p para uma estruturaqualquer (como fizemos em p = &ficha; ) e quisermos acessar um elemento da estruturapoderiamos fazer:104(*p).nomeOs parenteses sao necessarios, porque o operador . tem precedencia maior que ooperador * . Porem, este formato nao e muito usado. O que e comum de se fazer e acessar oelemento nome atraves do operador seta, que e formado por um sinal de "menos" (-) seguidopor um sinal de "maior que" (>), isto e: -> . Assim faremos:p->nomeA declaracao acima e muito mais facil e concisa. Para acessarmos o elemento CEP dentrode endereco fariamos:p->endereco.CEPFacil, nao?AUTO AVALIACAOSeja a seguinte struct que e utilizada para descrever os produtos que estao no estoquede uma loja :struct Produto {char nome[30]; /* Nome do produto */int codigo; /* Codigo do produto */double preco; /* Preco do produto */};a) Escreva uma instrucao que declare uma matriz de Produto com 10 itens de produtos;b) Atribua os valores "Pe de Moleque", 13205 e R$0,20 aos membros da posicao 0 e os valores"Cocada Baiana", 15202 e R$0,50 aos membros da posicao 1 da matriz anterior;c) Faca as mudancas que forem necessarias para usar um ponteiro para Produto ao inves deuma matriz de Produtos. Faca a alocacao de memoria de forma que se possa armazenar 10produtos na area de memoria apontada por este ponteiro e refaca as atribuicoes da letra b;d) Escreva as instrucoes para imprimir os campos que foram atribuidos na letra c.Declaracao UnionUma declaracao union determina uma unica localizacao de memoria onde podem estararmazenadas varias variaveis diferentes. A declaracao de uma uniao e semelhante adeclaracao de uma estrutura:union nome_do_tipo_da_union{tipo_1 nome_1;tipo_2 nome_2;...tipo_n nome_n;} variaveis_union;Como exemplo, vamos considerar a seguinte uniao:union angulo{float graus;float radianos;};105Nela, temos duas variaveis (graus e radianos) que, apesar de terem nomes diferentes,ocupam o mesmo local da memoria. Isto quer dizer que so gastamos o espaco equivalente aum unico float. Unioes podem ser feitas tambem com variaveis de diferentes tipos. Nestecaso, a memoria alocada corresponde ao tamanho da maior variavel no union. Veja o exemplo:#include <stdio.h>#define GRAUS G#define RAD Runion angulo{int graus;float radianos;};void main(){union angulo ang;char op;printf("\nNumeros em graus ou radianos? (G/R):");scanf("%c",&op);if (op == GRAUS){ang.graus = 180;printf("\nAngulo: %d\n",ang.graus);}else if (op == RAD){ang.radianos = 3.1415;printf("\nAngulo: %f\n",ang.radianos);}else printf("\nEntrada invalida!!\n");}Temos que tomar o maior cuidado pois poderiamos fazer:#include <stdio.h>union numero{char Ch;int I;float F;};main (void){union numero N;N.I = 123;printf ("%f",N.F); /* Vai imprimir algo que nao e necessariamente 123 ...*/return 0;}O programa acima e muito