Menu
Coddy logo textTech

O Operador Seta (->)

Parte da seção Logic & Flow do Journey de C da Coddy — lição 45 de 63.

Ao trabalhar com ponteiros para structs, acessar os membros da struct requer uma sintaxe especial. Embora você possa usar o operador de desreferência e a notação de ponto juntos, C fornece um operador mais conveniente especificamente para esse propósito: o operador de seta (->).

O operador de seta permite que você acesse membros de uma struct através de um ponteiro de uma forma limpa e legível:

ptr->member

Isso é equivalente a escrever (*ptr).member, mas muito mais conciso.

Veja como funciona na prática:

struct Point p1 = {10, 20};
struct Point *ptr = &p1;

// Usando o operador de seta
printf("x = %d, y = %d\n", ptr->x, ptr->y);

// Isso é o mesmo que:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

O operador de seta torna seu código mais limpo e fácil de ler, especialmente ao trabalhar com estruturas de dados complexas. É a forma padrão de acessar membros de struct através de ponteiros na programação C.

challenge icon

Desafio

Fácil

Crie um programa em C que demonstre o uso do operador de seta para acessar membros de uma struct através de ponteiros. Seu programa deve:

  1. Definir uma struct chamada Book com os seguintes membros:
    • Um inteiro id para armazenar o ID do livro
    • Um array de caracteres title com tamanho 40 para armazenar o título do livro
    • Um array de caracteres author com tamanho 30 para armazenar o nome do autor
    • Um float price para armazenar o preço do livro
    • Um inteiro pages para armazenar o número de páginas
  2. Na função main, crie uma variável Book chamada myBook
  3. Declare um ponteiro para uma struct Book chamado bookPtr
  4. Atribua o endereço de myBook para bookPtr
  5. Leia os seguintes valores de entrada e atribua-os aos membros da struct usando o operador de seta através do ponteiro:
    • Leia um inteiro para o ID e atribua-o usando bookPtr->id
    • Leia uma string para o título e atribua-a usando bookPtr->title
    • Leia uma string para o autor e atribua-a usando bookPtr->author
    • Leia um float para o preço e atribua-o usando bookPtr->price
    • Leia um inteiro para as páginas e atribua-o usando bookPtr->pages
  6. Após ler todos os valores, realize as seguintes operações usando o operador de seta:
    • Aplique um desconto de 10% ao preço: bookPtr->price = bookPtr->price * 0.9;
    • Adicione 50 páginas de bônus: bookPtr->pages += 50;
  7. Imprima as informações do livro usando o operador de seta para acessar cada membro neste formato exato:
    • Book Information:
    • ID: [id]
    • Title: [title]
    • Author: [author]
    • Price: [price]
    • Pages: [pages]
  8. Calcule e imprima o preço por página usando o operador de seta no formato: Price per page: [price_per_page]

Este desafio testa sua compreensão do operador de seta para acessar membros de struct através de ponteiros. Você praticará o uso da sintaxe ptr->member tanto para leitura quanto para escrita em membros de struct, demonstrando que ela é equivalente a (*ptr).member, porém muito mais conveniente e legível.

Folha de consulta

O operador de seta (->) fornece uma maneira conveniente de acessar membros de uma struct através de um ponteiro:

ptr->member

Isso é equivalente a (*ptr).member, mas mais conciso e legível.

Exemplo de uso:

struct Point p1 = {10, 20};
struct Point *ptr = &p1;

// Usando o operador de seta
printf("x = %d, y = %d\n", ptr->x, ptr->y);

// Isso é o mesmo que:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

Experimente você mesmo

#include <stdio.h>
#include <string.h>

// TODO: Defina a struct Book aqui

int main() {
    // TODO: Crie uma variável Book chamada myBook
    
    // TODO: Declare um ponteiro para Book chamado bookPtr
    
    // TODO: Atribua o endereço de myBook ao bookPtr
    
    // Ler valores de entrada
    int id;
    char title[40];
    char author[30];
    float price;
    int pages;
    
    scanf("%d", &id);
    scanf("%s", title);
    scanf("%s", author);
    scanf("%f", &price);
    scanf("%d", &pages);
    
    // TODO: Atribua os valores de entrada aos membros da struct usando o operador seta
    
    // TODO: Aplique 10% de desconto ao preço usando o operador seta
    
    // TODO: Adicione 50 páginas de bônus usando o operador seta
    
    // TODO: Imprima as informações do livro usando o operador seta
    
    // TODO: Calcule e imprima o preço por página usando o operador seta
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow