Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Structs Aninhadas | Uso Avançado de Structs
Dominando Structs em C

bookStructs 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

main.c

copy
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

main.c

copy
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.

Tarefa

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.

  1. Dentro da função, crie uma variável float chamada total inicializada com 0.0f.
  2. Utilize um laço for para iterar sobre o array de produtos de 0 até n.
  3. Para cada produto, compare o campo manufacturer.companyName do produto com o parâmetro companyName utilizando strcmp.
  4. Se houver correspondência, adicione price * quantity ao total.
  5. Retorne o valor final de total.

Solução

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1
single

single

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

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?

close

bookStructs 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

main.c

copy
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

main.c

copy
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.

Tarefa

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.

  1. Dentro da função, crie uma variável float chamada total inicializada com 0.0f.
  2. Utilize um laço for para iterar sobre o array de produtos de 0 até n.
  3. Para cada produto, compare o campo manufacturer.companyName do produto com o parâmetro companyName utilizando strcmp.
  4. Se houver correspondência, adicione price * quantity ao total.
  5. Retorne o valor final de total.

Solução

Switch to desktopMude para o desktop para praticar no mundo realContinue de onde você está usando uma das opções abaixo
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 1
single

single

some-alt