Menu
Coddy logo textTech

El operador flecha (->)

Parte de la sección Logic & Flow del Journey de C de Coddy — lección 45 de 63.

Al trabajar con punteros a estructuras, acceder a los miembros de la estructura requiere una sintaxis especial. Si bien podrías usar el operador de desreferencia y la notación de punto juntos, C proporciona un operador más conveniente específicamente para este propósito: el operador flecha (->).

El operador flecha te permite acceder a los miembros de una estructura a través de un puntero de una manera limpia y legible:

ptr->member

Esto es equivalente a escribir (*ptr).member, pero mucho más conciso.

Así es como funciona en la práctica:

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

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

// Esto es lo mismo que:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

El operador de flecha hace que tu código sea más limpio y fácil de leer, especialmente cuando se trabaja con estructuras de datos complejas. Es la forma estándar de acceder a los miembros de struct a través de punteros en la programación en C.

challenge icon

Desafío

Fácil

Crea un programa en C que demuestre el uso del operador de flecha para acceder a los miembros de una estructura a través de punteros. Tu programa debe:

  1. Definir un struct llamado Book con los siguientes miembros:
    • Un entero id para almacenar el ID del libro
    • Un arreglo de caracteres title con tamaño 40 para almacenar el título del libro
    • Un arreglo de caracteres author con tamaño 30 para almacenar el nombre del autor
    • Un flotante price para almacenar el precio del libro
    • Un entero pages para almacenar el número de páginas
  2. En la función principal, crea una variable Book llamada myBook
  3. Declara un puntero a una estructura Book llamado bookPtr
  4. Asigna la dirección de myBook a bookPtr
  5. Lee los siguientes valores de entrada y asígnalos a los miembros de la estructura utilizando el operador de flecha a través del puntero:
    • Lee un entero para el ID y asígnalo usando bookPtr->id
    • Lee una cadena para el título y asígnala usando bookPtr->title
    • Lee una cadena para el autor y asígnala usando bookPtr->author
    • Lee un flotante para el precio y asígnalo usando bookPtr->price
    • Lee un entero para las páginas y asígnalo usando bookPtr->pages
  6. Después de leer todos los valores, realiza las siguientes operaciones utilizando el operador de flecha:
    • Aplica un 10% de descuento al precio: bookPtr->price = bookPtr->price * 0.9;
    • Añade 50 páginas de bonificación: bookPtr->pages += 50;
  7. Imprime la información del libro utilizando el operador de flecha para acceder a cada miembro en este formato exacto:
    • Book Information:
    • ID: [id]
    • Title: [title]
    • Author: [author]
    • Price: [price]
    • Pages: [pages]
  8. Calcula e imprime el precio por página utilizando el operador de flecha en el formato: Price per page: [price_per_page]

Este desafío pone a prueba tu comprensión del operador de flecha para acceder a los miembros de una estructura a través de punteros. Practicarás el uso de la sintaxis ptr->member tanto para leer como para escribir en los miembros de la estructura, demostrando que es equivalente a (*ptr).member pero mucho más conveniente y legible.

Hoja de referencia

El operador de flecha (->) proporciona una forma conveniente de acceder a los miembros de una estructura a través de un puntero:

ptr->member

Esto es equivalente a (*ptr).member pero más conciso y legible.

Ejemplo de uso:

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

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

// Esto es lo mismo que:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);

Pruébalo tú mismo

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

// TODO: Define la estructura Book aquí

int main() {
    // TODO: Crea una variable Book llamada myBook
    
    // TODO: Declara un puntero a Book llamado bookPtr
    
    // TODO: Asigna la dirección de myBook a bookPtr
    
    // Leer 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: Asigna los valores de entrada a los miembros de la estructura usando el operador flecha
    
    // TODO: Aplica un 10% de descuento al precio usando el operador flecha
    
    // TODO: Añade 50 páginas de bonificación usando el operador flecha
    
    // TODO: Imprime la información del libro usando el operador flecha
    
    // TODO: Calcula e imprime el precio por página usando el operador flecha
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Logic & Flow