Estruturas (structs) em C

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

Qual a principal finalidade das estruturas (structs) na linguagem C?

  • Agrupar diferentes tipos de dados sob um único nome, facilitando a organização e manipulação. (correct)
  • Criar interfaces gráficas para o usuário.
  • Definir novas funções para o programa.
  • Realizar operações matemáticas complexas.

Qual palavra-chave é utilizada em C para declarar uma nova estrutura?

  • `typedef`
  • `class`
  • `union`
  • `struct` (correct)

Qual das alternativas abaixo apresenta a forma correta de declarar uma variável p1 do tipo struct Pessoa em C, sem o uso de typedef?

  • `new Pessoa p1;`
  • `p1 struct Pessoa;`
  • `struct Pessoa p1;` (correct)
  • `Pessoa p1;`

Como se acessa o membro idade de uma variável p1 do tipo struct Pessoa em C?

<p><code>p1.idade</code> (C)</p> Signup and view all the answers

Qual operador é utilizado para acessar um membro de uma struct através de um ponteiro?

<p><code>-&gt;</code> (flecha) (D)</p> Signup and view all the answers

O que significa 'aninhamento de structs' em C?

<p>Colocar uma <code>struct</code> dentro de outra <code>struct</code>. (B)</p> Signup and view all the answers

Quando uma struct é passada para uma função por valor, o que acontece com a estrutura original?

<p>Uma cópia da estrutura é criada e passada para a função. (A)</p> Signup and view all the answers

Qual é a principal desvantagem de passar uma struct grande por valor para uma função em C?

<p>Pode haver baixa eficiência devido à cópia da estrutura na memória. (A)</p> Signup and view all the answers

Qual função da biblioteca padrão de C é utilizada para alocar memória dinamicamente para uma struct?

<p><code>malloc()</code> (A)</p> Signup and view all the answers

Após alocar dinamicamente memória para uma struct, qual é a responsabilidade do programador em relação à memória alocada?

<p>A memória precisa ser liberada explicitamente usando a função <code>free()</code> para evitar vazamentos de memória. (D)</p> Signup and view all the answers

Suponha que você tenha uma struct Livro com campos como título (string) e ano (inteiro). Qual seria a maneira correta de declarar um ponteiro para essa struct e alocar memória para ela?

<p><code>Livro *l = (Livro*)malloc(sizeof(Livro));</code> (C)</p> Signup and view all the answers

Se você tem um ponteiro p para uma struct Pessoa, e idade é um membro dessa struct, qual das seguintes opções acessa corretamente a idade?

<p><code>p-&gt;idade</code> (B)</p> Signup and view all the answers

Qual das seguintes declarações de struct demonstra corretamente o conceito de aninhamento, onde uma struct Endereco está dentro de uma struct Cliente?

<p><code>struct Endereco { char rua[50]; int numero; }; struct Cliente { char nome[50]; int idade; struct Endereco endereco; };</code> (A)</p> Signup and view all the answers

Em C, qual a diferença fundamental entre passar uma struct por valor e passar um ponteiro para uma struct para uma função, em termos de modificação da struct original?

<p>Passar por valor cria uma cópia da struct, então a original não é modificada; passar um ponteiro permite modificar a struct original. (A)</p> Signup and view all the answers

Qual das seguintes opções representa um problema comum associado ao uso de malloc para alocar memória para structs em C?

<p>A memória alocada com <code>malloc</code> deve ser explicitamente liberada com <code>free</code> para evitar vazamentos de memória. (D)</p> Signup and view all the answers

Considere a seguinte struct: struct Coord { int x; int y; };. Qual das opções abaixo mostra a forma correta de inicializar uma variável ponto dessa struct com os valores x=10 e y=20 na declaração?

<p>Todas as opções anteriores estão corretas. (A)</p> Signup and view all the answers

Se você tem uma struct Endereco aninhada dentro de uma struct Pessoa, como você acessaria a rua do endereço de uma pessoa, dado um ponteiro p para a struct Pessoa?

<p><code>p-&gt;endereco-&gt;rua</code> (D)</p> Signup and view all the answers

Qual é a principal razão para usar typedef ao definir structs em C?

<p>Para simplificar a declaração de variáveis do tipo struct, eliminando a necessidade de usar a palavra-chave <code>struct</code>. (C)</p> Signup and view all the answers

Qual das seguintes tarefas não é uma aplicação comum de structs em C?

<p>Criar classes com herança e polimorfismo, como em linguagens orientadas a objetos. (B)</p> Signup and view all the answers

Flashcards

O que são structs em C?

Tipos de dados personalizados que agrupam diferentes variáveis sob um mesmo nome.

Como declarar uma struct?

Usamos a palavra-chave struct, seguida do nome da estrutura e dos campos internos.

Como criar uma variável de struct?

Podemos criar uma variável de struct diretamente (struct Pessoa p1;) ou usando typedef para simplificar a declaração (Pessoa p1;).

Como acessar membros de uma struct?

Usamos o operador . (ponto) para acessar os membros de uma variável struct.

Signup and view all the flashcards

Como inicializar uma struct?

Inicializamos diretamente na declaração: struct Pessoa p1 = {"Carlos", 30, 1.75};

Signup and view all the flashcards

Como usar struct com ponteiros?

Usamos o operador -> (seta) ao invés de . (ponto) para acessar membros via ponteiro.

Signup and view all the flashcards

Podemos aninhar structs?

Sim, uma struct pode conter outras structs como membros, o que é chamado de aninhamento.

Signup and view all the flashcards

Como passar uma struct para uma função?

Podemos passar uma struct por valor (cópia) ou por referência (ponteiro).

Signup and view all the flashcards

O que acontece ao passar struct grande por valor?

Passar uma struct grande por valor pode ser ineficiente, pois toda a estrutura é copiada. É melhor passar por ponteiro.

Signup and view all the flashcards

Como alocar dinamicamente uma struct?

Usamos malloc() para alocar memória dinamicamente para uma struct, e não se esqueça de usar free() para liberar a memória alocada.

Signup and view all the flashcards

Study Notes

  • As estruturas (structs) em C são tipos de dados personalizados que permitem agrupar diferentes variáveis sob um único nome.

Declaração de struct

  • Para declarar uma struct, utiliza-se a palavra-chave struct seguida do nome da estrutura e dos campos internos definidos entre chaves.
  • Exemplo:
struct Pessoa {
    char nome;
    int idade;
    float altura;
};

Criação de Variáveis struct

  • É possível criar variáveis de uma struct diretamente ou utilizando typedef.
  • Declaração normal: struct Pessoa p1;
  • Com typedef:
typedef struct {
    char nome;
    int idade;
} Pessoa;

Pessoa p1; // Declaração sem "struct"

Acesso aos Membros da struct

  • O acesso aos membros de uma struct é feito através do operador ponto (.).
  • Exemplo:
p1.idade = 25;
printf("Idade: %d\n", p1.idade);

Inicialização de struct

  • Uma struct pode ser inicializada diretamente na declaração.
  • Exemplo: struct Pessoa p1 = {"Carlos", 30, 1.75};

struct com Ponteiros

  • Ao utilizar ponteiros para acessar membros de uma struct, usa-se o operador seta (->).
  • Exemplo:
struct Pessoa *p = &p1;
printf("Idade: %d\n", p->idade); // Equivalente a (*p).idade

Aninhamento de structs

  • É possível incluir uma struct dentro de outra, um conceito conhecido como aninhamento de structs.
  • Exemplo:
struct Data {
    int dia, mes, ano;
};

struct Pessoa {
    char nome;
    struct Data nascimento;
};

Passagem de struct para Funções

  • Uma struct pode ser passada para uma função por valor ou por referência (ponteiro).
  • Passagem por valor:
void mostrarPessoa(struct Pessoa p) {
    printf("Nome: %s\n", p.nome);
}
  • Passagem por referência:
void modificarIdade(struct Pessoa *p) {
    p->idade = 40;
}

Eficiência na Passagem de structs

  • Passar uma struct grande por valor pode resultar em baixa eficiência devido à cópia integral da estrutura na memória; a passagem por ponteiro é mais eficiente.

Alocação Dinâmica de struct

  • Utiliza-se malloc() para alocar memória dinamicamente para uma struct.
  • Exemplo:
struct Pessoa *p = (struct Pessoa *)malloc(sizeof(struct Pessoa));
strcpy(p->nome, "Maria");
p->idade = 28;
free(p); // Liberação da memória alocada

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

More Like This

Struct and Unsigned Int Quiz
5 questions

Struct and Unsigned Int Quiz

EffectualProtactinium avatar
EffectualProtactinium
9: Custom Data Types
33 questions
Use Quizgecko on...
Browser
Browser