Programar em C/Estruturas: diferenças entre revisões

[revisão pendente][revisão pendente]
Conteúdo apagado Conteúdo adicionado
m Foram revertidas as edições de 201.53.219.10 (disc) para a última revisão de Marcos Antônio Nunes de Moura
m <source> -> <syntaxhighlight> (phab:T237267)
 
Linha 13:
 
 
<sourcesyntaxhighlight lang=c>
struct <identificador> {
<tipo> campo_um ;
<tipo> campo_dois ;
};
</syntaxhighlight>
</source>
 
Aqui o tipo struct indica que vamos criar uma estrutura.
Linha 29:
'''Primeiro método:'''
 
<sourcesyntaxhighlight lang=c>
struct minha_estrutura
{
Linha 36:
char fruta[40];
} ;
</syntaxhighlight>
</source>
 
Aqui o identificador do tipo "struct" é "minha_estrutura" dentro dessa estrutura temos três campos o ultimo é "fruta"
Linha 45:
Para ter acesso aos membros definidos dentro da estrutura utilizamos um operador de seleçao de membro "."(um ponto).
 
<sourcesyntaxhighlight lang=c>
nova_estrutura.fruta[0];
</syntaxhighlight>
</source>
 
Nos dá o primeiro caracter da palavra contida dentro do membro "fruta".
Linha 53:
Para inicializar um campo da estrutura o processo é o mesmo que usamos com as variáveis.
 
<sourcesyntaxhighlight lang=c>
nova_estrutura.campo_dois = 100;
</syntaxhighlight>
</source>
 
== Matrizes de estruturas ==
Linha 70:
* Ao mesmo tempo que declaramos a estrutura
 
<sourcesyntaxhighlight lang=c>
struct product {
int weight;
float price;
} apple, banana, melon;
</syntaxhighlight>
</source>
* Ou como uma variável normal
 
<sourcesyntaxhighlight lang=c>
struct product
{
Linha 87:
struct product apple, banana, melon;
}
</syntaxhighlight>
</source>
E até podemos declarar um array delas
 
<sourcesyntaxhighlight lang=c>
Person p[20];
</syntaxhighlight>
</source>
 
'''Pergunta''': como é que é feito exatamente os objetos?
Linha 102:
Se tivermos apenas um objeto (ou variável da estrutura) não é necessário darmos o nome da estrutura
 
<sourcesyntaxhighlight lang=c>
struct {
char item[40]; // name of item
Linha 110:
int lead_time; // number of days before resupply
} temp;
</syntaxhighlight>
</source>
 
== Acessar as variáveis membro das estruturas ==
Agora queremos dar valores a cada uma das pessoas, queremos dar o nome e a altura, para isso faríamos;
 
<sourcesyntaxhighlight lang=c>
strcpy(p1.name, "Tiago");
p1.altura =1.9;
</syntaxhighlight>
</source>
 
A forma genérica é:
 
<sourcesyntaxhighlight lang=c>
structure-varname.member-name
</syntaxhighlight>
</source>
 
ou seja
Linha 133:
Exemplo
 
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
const int MAX = 3;
Linha 160:
return 0;
}
</syntaxhighlight>
</source>
 
== Iniciar uma estrutura ==
Linha 166:
Podemos iniciar uma estrutura usando uma '''lista de iniciação''', que seria algo como:
 
<sourcesyntaxhighlight lang=c>
Person p1 = {"Jeff Kent", 72};
</syntaxhighlight>
</source>
isto basicamente é igual a arrays, apenas com a diferença de termos tipos diferentes. Logo a ordem vai interessar, por exemplo se escrevêssemos
<sourcesyntaxhighlight lang=c>
Person p1 = {72, "Jeff Kent"}; //não iria funcionar- erro de compilação
</syntaxhighlight>
</source>
 
== Ponteiros para estruturas ==
 
<sourcesyntaxhighlight lang=c>
struct movies_t
{
Linha 185:
movies_t amovie;
movies_t * pmovie;
</syntaxhighlight>
</source>
 
Nós criámos algo
<sourcesyntaxhighlight lang=c>
movies_t title year
amovie
* pmovie
</syntaxhighlight>
</source>
 
Vejamos que temos um ponteiro como instância.
<sourcesyntaxhighlight lang=c>
// pointers to structures
#include <stdio.h>
Linha 221:
return 0;
}
</syntaxhighlight>
</source>
Como já devem ter deduzido o operador -> será muito similar a
pmovie->title é equivalente a (*pmovie).title
Linha 231:
A estrutura é passada como ponteiro.
 
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
#include <string.h>
Linha 267:
printf("Person's name is %s and height is %d.", pers.name, pers.height);
}
</syntaxhighlight>
</source>
 
== Estruturas aninhadas ==
 
A ideia é ter uma estrutura dentro de outra estrutura.
<sourcesyntaxhighlight lang=c>
#include <stdio.h>
Linha 317:
printf("Person's birthday in dd/mm/yyyy format is: %d/%d/%d\n", pers.bDay.day, pers.bDay.month, pers.bDay.year );
}
</syntaxhighlight>
</source>
 
Reparem que a estrutura Date tem de ser declarada antes da estrutura Person, pois caso contrário o compilador não entenderia o tipo declarado na estrutura Person.