Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
Apostila C da UFMG - Universidade do Minho
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
11.1.3 - Matrizes de estruturas<br />
Um estrutura é como qualquer outro tipo de <strong>da</strong><strong>do</strong> no C. Podemos, portanto, fazer matrizes de estruturas. Vamos ver<br />
como ficaria a declaração de uma matriz de 100 fichas pessoais:<br />
struct ficha_pessoal fichas [100];<br />
Poderíamos então acessar a segun<strong>da</strong> letra <strong>da</strong> sigla de esta<strong>do</strong> <strong>da</strong> décima terceira ficha fazen<strong>do</strong>:<br />
fichas[12].endereco.sigla_esta<strong>do</strong>[1];<br />
Atribuin<strong>do</strong><br />
Podemos atribuir duas estruturas que sejam <strong>do</strong> mesmo tipo. O C irá, neste caso, copiar uma estrutura na outra. Esta<br />
operação não apresenta problemas pois quan<strong>do</strong> declaramos<br />
struct ficha_pessoal ficha;<br />
ficha não é um ponteiro, mas uma estrutrura. Veja as linhas abaixo:<br />
void main()<br />
{<br />
struct ficha_pessoal primeira, segun<strong>da</strong>;<br />
Le_<strong>da</strong><strong>do</strong>s(&primeira);<br />
segun<strong>da</strong> = primeira;<br />
Imprime_<strong>da</strong><strong>do</strong>s(segun<strong>da</strong>);<br />
}<br />
São declara<strong>da</strong>s duas estruturas <strong>do</strong> tipo ficha_pessoal, uma chama<strong>da</strong> primeira e outra chama<strong>da</strong> segun<strong>da</strong>. Supon<strong>do</strong> que<br />
haja declara<strong>da</strong> uma função Le_<strong>da</strong><strong>do</strong>s() que faça a leitura de uma estrutura, admitimos que após a execução <strong>da</strong><br />
segun<strong>da</strong> linha de main(), a estrutura primeira estará preenchi<strong>da</strong> com <strong>da</strong><strong>do</strong>s váli<strong>do</strong>s. Os valores de primeira são<br />
copia<strong>do</strong>s em segun<strong>da</strong> apenas com a expressão de atribuição:<br />
segun<strong>da</strong> = primeira;<br />
To<strong>do</strong>s os campos de primeira serão copia<strong>do</strong>s na ficha chama<strong>da</strong> segun<strong>da</strong>. Deve mos tomar cui<strong>da</strong><strong>do</strong> com a seguinte<br />
declaração:<br />
struct ficha_pessoal fichas [100];<br />
pois neste caso fichas é um ponteiro para a primeira ficha. Se quisermos a estrutura completa <strong>da</strong> n-ésima ficha<br />
devemos usar fichas[n-1].<br />
11.1.4 - Passan<strong>do</strong> para funções<br />
No exemplo apresenta<strong>do</strong> no ítem usan<strong>do</strong>, vimos o seguinte coman<strong>do</strong>:<br />
strcpy (ficha.nome,"Luiz Osval<strong>do</strong> Silva");<br />
Neste coman<strong>do</strong> um elemento de uma estrutura é passa<strong>do</strong> para uma função. Este tipo de operação pode ser feita sem<br />
maiores considerações.<br />
Podemos também passar para uma função uma estrutura inteira. Veja a seguinte função:<br />
void PreencheFicha (struct ficha_pessoal ficha)<br />
{<br />
...<br />
}<br />
Como vemos acima é fácil passar a estrutura como um to<strong>do</strong> para a função. Devemos observar que, como em qualquer<br />
outra função no C, a passagem <strong>da</strong> estrutura é feita por valor. Isto significa que alterações na estrutura dentro <strong>da</strong> função<br />
não terão efeito na variável fora <strong>da</strong> função. Mais uma vez podemos contornar este pormenor usan<strong>do</strong> ponteiros e<br />
passan<strong>do</strong> para a função um ponteiro para a estrutura.<br />
11.1.5 - Ponteiros<br />
Podemos ter um ponteiro para uma estrutura. Vamos ver como poderia ser declara<strong>do</strong> um ponteiro para as estruturas<br />
de ficha que estamos usan<strong>do</strong> nestas seções:<br />
struct ficha_pessoal *p;<br />
Os ponteiros para uma estrutura funcionam como os ponteiros para qualquer outro tipo de <strong>da</strong><strong>do</strong>s no C. Há, entretanto,<br />
um detalhe a ser considera<strong>do</strong>. Se apontarmos o ponteiro p declara<strong>do</strong> acima para uma estrutura qualquer e quisermos<br />
acessar um elemento <strong>da</strong> estrutura poderíamos fazer:<br />
(*p).nome<br />
Este formato raramente é usa<strong>do</strong>. O que é comum de se fazer é acessar o elemento nome através <strong>do</strong> opera<strong>do</strong>r seta (->).<br />
Assim faremos:<br />
p->nome<br />
A declaração acima é muito mais fácil e concisa. Para acessarmos o elemento CEP dentro de endereco faríamos:<br />
Pág. 77