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
Can you show me an example of how to declare an embedded nested structure in C?
What are the advantages and disadvantages of using embedded versus separate nested structures?
How do I access the fields of a nested structure in C?
Incrível!
Completion taxa melhorada para 4.35
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