Obra: Programar em C/Estruturas
Matéria: Português
Nível: médio
estruturas as estruturas structs permitem com que possamos ter variáveis de vários tipos aglomerados sob mesmo nome esse mesmo nome vai passar ser um novo tipo de dados tal como int ou float mas uso disto que podemos ter valores que tenham alguma relação lógica por exemplo guardar um int de idade um string de nome isto pode ser atributos de uma pessoa ou seja podemos empacotar várias variáveis de vários tipos com objetivo de representar mundo real dar um nome essas variáveis todas ao fazer isto criamos um tipo de dados da mesma forma como fazemos em relação ao int ou ao float declarar uma estrutura sintaxe struct campo_um campo_dois aqui tipo struct indica que vamos criar uma estrutura nome ou identificador pode ser alunos família etc têm de ser válidos identifiers não esquecer ponto vírgula no fim da declaração campo_um campo_dois são variáveis membro member variables ou campo da estrutura assim criamos novos tipos de dados primeiro método struct minha_estrutura int variavel_um int campo_dois char fruta aqui identificador do tipo struct minha_estrutura dentro dessa estrutura temos três campos ultimo fruta agora podemos usar esse tipo struct para definir variáveis struct minha_estrutura nova_estructura para ter acesso aos membros definidos dentro da estrutura utilizamos um operador de seleçao de membro um ponto nova_estrutura fruta nos dá primeiro caracter da palavra contida dentro do membro fruta para inicializar um campo da estrutura processo mesmo que usamos com as variáveis nova_estrutura campo_dois matrizes de estruturas uma estrutura como qualquer outro tipo de dado no podemos portanto criar matrizes de estruturas vamos ver como ficaria declaração de um vetor de fichas pessoais struct minha_estrutura fichas poderíamos então acessar um campo dando um índice do vetor fichas fichas variavel_um declarar instâncias objetos da estrutura podemos declarar os objetos de duas formas ao mesmo tempo que declaramos estrutura struct product int weight float price apple banana melon ou como uma variável normal struct product int main struct product apple banana melon até podemos declarar um array delas person pergunta como que feito exatamente os objetos para cada objeto vão ser feito uma cópia dos elementos da estrutura agora isso significa que os objetos são distintos entre si em termos de reserva de memória ie medida que enumero os objetos vão ser reservado para cada objeto tamanho de bytes ou somam se todos os objetos reserva se para todos os objetos de uma forma seguida penso que deve ser opção se tivermos apenas um objeto ou variável da estrutura não necessário darmos nome da estrutura struct char item name of item double cost cost double retail retail price int on_hand amount on hand int lead_time number of days before resupply temp acessar as variáveis membro das estruturas agora queremos dar valores cada uma das pessoas queremos dar nome altura para isso faríamos strcpy name tiago altura forma genérica structure varname member name ou seja exempl
a isso faríamos strcpy name tiago altura forma genérica structure varname member name ou seja exemplo include const int max struct person char name int height int main person pmax for int iniciar uma estrutura podemos iniciar uma estrutura usando uma lista de iniciação que seria algo como person jeff kent isto basicamente igual arrays apenas com diferença de termos tipos diferentes logo ordem vai interessar por exemplo se escrevêssemos person jeff kent não iria funcionar erro de compilação ponteiros para estruturas struct movies_t string title int year movies_t amovie movies_t pmovie nós criámos algo movies_t title year amovie pmovie vejamos que temos um ponteiro como instância pointers to structures include struct movies_t char title int year int main string mystr movies_t amovie movies_t pmovie pmovie amovie atribuímos valor ao ponteiro printf enter title fgets pmovie title stdin operador printf enter year scanf pmovie year printf nyou have entered printf pmovie title pmovie year operador return como já devem ter deduzido operador será muito similar pmovie title equivalente pmovie title mas olhem que diferente pmovie title que equivalente pmovie title passando estruturas como argumento de funções estrutura passada como ponteiro include include struct person string name int height void setvalues person void getvalues const person int main person setvalues printf outputting person data printf getvalues return void setvalues person pers printf enter person name fgets pers name stdin printf enter height in inches scanf pers height void getvalues const person pers printf person name is and height is pers name pers height estruturas aninhadas ideia ter uma estrutura dentro de outra estrutura include struct date estrutura chamada de date int day int month int year struct person char name int height date bday temos uma nova variável mas notem tipo void setvalues person void getvalues const person int main person setvalues printf outputting person data printf getvalues return void setvalues person pers printf enter person name fgets pers name stdin printf enter height in inches scanf pers height printf enter day month and year of birthday separated by spaces scanf pers bday day pers bday month pers bday year void getvalues const person pers printf person name pers name printf person height in inches is pers height printf person birthday in dd mm yyyy format is pers bday day pers bday month pers bday year reparem que estrutura date tem de ser declarada antes da estrutura person pois caso contrário compilador não entenderia tipo declarado na estrutura person pergunta por que não podemos acrescentar mais membros campos nas estruturas porque elas são compiladas estaticamente com posição de memória já alocada tipo já conhecido em tempo de compilação pergunta ao invés de termos apenas variáveis nas estruturas poderíamos ter também funções sim como ponteiros para funções
a funções