Struct

Autor
Afiliação

Diogo Silva

Academia da Força Aérea

Slides

Link slides, PDF

Nota sobre atribuição de struct

  • Quando o C foi criado, as únicas operações suportadas em struct eram o endereçamento (e.g. &aluno) e o acesso a um campo (e.g. aluno.nome ou pointer_aluno->nome). A atribuição de struct não era suportada.

  • Contudo, a atribuição de struct foi adicionada posteriormente.

  • A atribuição de struct copia o conteúdo de uma struct para outra struct do mesmo tipo.

  • Exemplo: ```c #include <stdio.h> #include <string.h>

    typedef struct { char nome[50]; int num; } Pessoa;

    int main(){ // criar 2 pessoas com dados diferentes Pessoa p1 = {“Isaac Asimov”, 42}; Pessoa p2 = {“Albert Einstein”, 87}; printf(“p1rintf(”p2/ copiar pessoa 1 para 2 p2=p1; printf(“p2/ alterar pessoa 1 não altera pessoa 2 strcpy(p1.nome,”Douglas Adams”); printf(“p1rintf(”p2%s - %d“, p2.nome, p2.num); } ```

  • Neste exemplo alterar o nome da pessoa 1 não altera o nome da pessoa 2, pois a atribuição de struct copia o conteúdo da struct, incluindo a string (array de char) do nome.

  • Contudo, a cópia é superfiial. Se existirem apontadores na definição da struct, a atribuição copia apenas o endereço para o qual os apontadores apontam, e não o seu conteúdo.

  • Exemplo: ```c typedef struct { char * nome; int nota; } Aluno;

    struct Aluno aluno1; aluno1.nome = malloc(50 * sizeof(char)); strcpy(aluno1.nome, “João”); aluno1.nota = 10; printf(“Nome aluno 1: %s”, aluno1.nome); // Imprime “João”

    struct Aluno aluno2 = aluno1; aluno1.nome[0] = ‘M’; printf(“Nome aluno 1: %s”, aluno1.nome); // Imprime “Moão” ```

  • Neste exemplo, a alteração do nome do aluno 2 altera o nome do aluno 1, pois o campo nome de cada um aponta para a mesma região de memória.

Vídeos

  1. Intro, motivação | 1.5min
  2. Declarar, aceder | 4min
  3. Comparação, estruturas dentro de estruturas, funções | 4min
  4. typedef | 2min
  5. estruturas e apontadores | 4min
  6. Demo 1 | 10min
  7. Demo 1 | correção de criar_aluno | 3min
  8. Demo 1a | vector de Aluno | 4min
  9. Demo 1b
  10. Demo 1c
  11. Demo 1d
  12. Demo 1f
  13. Demo 1g

Vídeos Sharepoint - acesso com conta afa.ium

Exercícios 12.3x