Structs Aninhadas
Em C, estruturas podem conter outras estruturas como membros, além de tipos básicos como int ou char, arrays e ponteiros. Estruturas aninhadas são úteis quando se deseja agrupar dados relacionados de forma lógica.
Estrutura Aninhada Embutida
Uma estrutura aninhada embutida é declarada diretamente dentro da estrutura externa. Isso significa que a estrutura aninhada existe apenas dentro da estrutura externa e não pode ser utilizada em outros lugares.
main.c
123456789101112131415161718192021#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Neste exemplo, a estrutura Address é definida dentro de Person, portanto, existe apenas no contexto da estrutura Person. É possível acessar os campos da estrutura aninhada usando person.address, o que permite recuperar street, city e index. Essa abordagem é conveniente quando os dados aninhados são específicos para uma única estrutura externa e não precisam ser reutilizados em outros lugares.
Estrutura Aninhada Separada
Uma estrutura aninhada separada é declarada de forma independente e, em seguida, incluída na estrutura externa. Isso permite que a estrutura aninhada seja reutilizada em várias estruturas externas ou instanciada separadamente.
main.c
123456789101112131415161718192021222324#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Aqui, Address é declarado independentemente de Person, permitindo seu uso isolado ou em várias estruturas. Ao inicializar um Person, atribui-se uma instância de Address ao campo address. O acesso aos campos aninhados ocorre da mesma forma, utilizando person.address. Essa abordagem oferece maior flexibilidade e incentiva a reutilização de código e o design modular.
Swipe to start coding
Cada produto é representado por uma estrutura Product que contém uma estrutura aninhada Manufacturer. A função deve iterar sobre um array de produtos, verificar se o produto pertence ao fabricante especificado e somar o valor total (price * quantity) de todos os produtos correspondentes.
Implemente uma função calculateManufacturerTotal com tipo de retorno float.
- Dentro da função, crie uma variável
floatchamadatotalinicializada com0.0f. - Utilize um laço
forpara iterar sobre o array de produtos de0atén. - Para cada produto, compare o campo
manufacturer.companyNamedo produto com o parâmetrocompanyNameutilizandostrcmp. - Se houver correspondência, adicione
price * quantityaototal. - Retorne o valor final de
total.
Solução
Obrigado pelo seu feedback!
single
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Incrível!
Completion taxa melhorada para 7.69
Structs Aninhadas
Deslize para mostrar o menu
Em C, estruturas podem conter outras estruturas como membros, além de tipos básicos como int ou char, arrays e ponteiros. Estruturas aninhadas são úteis quando se deseja agrupar dados relacionados de forma lógica.
Estrutura Aninhada Embutida
Uma estrutura aninhada embutida é declarada diretamente dentro da estrutura externa. Isso significa que a estrutura aninhada existe apenas dentro da estrutura externa e não pode ser utilizada em outros lugares.
main.c
123456789101112131415161718192021#include <stdio.h> struct Person { char name[50]; int age; struct Address { char street[50]; char city[50]; char index[10]; } address; // embedded nested structure }; int main() { struct Person person = { "Sherlock Holmes", 27, {"Baker Street", "London", "221B"} }; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Neste exemplo, a estrutura Address é definida dentro de Person, portanto, existe apenas no contexto da estrutura Person. É possível acessar os campos da estrutura aninhada usando person.address, o que permite recuperar street, city e index. Essa abordagem é conveniente quando os dados aninhados são específicos para uma única estrutura externa e não precisam ser reutilizados em outros lugares.
Estrutura Aninhada Separada
Uma estrutura aninhada separada é declarada de forma independente e, em seguida, incluída na estrutura externa. Isso permite que a estrutura aninhada seja reutilizada em várias estruturas externas ou instanciada separadamente.
main.c
123456789101112131415161718192021222324#include <stdio.h> struct Address { char street[50]; char city[50]; char index[10]; }; struct Person { char name[50]; int age; struct Address address; // nested structure }; int main() { struct Address addr = {"Baker Street", "London", "221B"}; struct Person person = {"Sherlock Holmes", 27, addr}; printf("Name: %s\n", person.name); printf("Age: %d\n", person.age); printf("Address: %s, %s, %s\n", person.address.index, person.address.street, person.address.city); return 0; }
Aqui, Address é declarado independentemente de Person, permitindo seu uso isolado ou em várias estruturas. Ao inicializar um Person, atribui-se uma instância de Address ao campo address. O acesso aos campos aninhados ocorre da mesma forma, utilizando person.address. Essa abordagem oferece maior flexibilidade e incentiva a reutilização de código e o design modular.
Swipe to start coding
Cada produto é representado por uma estrutura Product que contém uma estrutura aninhada Manufacturer. A função deve iterar sobre um array de produtos, verificar se o produto pertence ao fabricante especificado e somar o valor total (price * quantity) de todos os produtos correspondentes.
Implemente uma função calculateManufacturerTotal com tipo de retorno float.
- Dentro da função, crie uma variável
floatchamadatotalinicializada com0.0f. - Utilize um laço
forpara iterar sobre o array de produtos de0atén. - Para cada produto, compare o campo
manufacturer.companyNamedo produto com o parâmetrocompanyNameutilizandostrcmp. - Se houver correspondência, adicione
price * quantityaototal. - Retorne o valor final de
total.
Solução
Obrigado pelo seu feedback!
single