Menu
CoddyTech

Comparación de Punteros

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 10 de 63.

Has aprendido a recorrer arrays usando aritmética de punteros. Ahora descubrirás que los punteros también se pueden comparar usando los mismos operadores relacionales que usas con las variables normales: ==, !=, < y >.

Cuando comparas dos punteros, estás comparando sus direcciones de memoria. Esto es particularmente útil cuando ambos punteros apuntan a elementos dentro de la misma matriz, ya que te permite determinar sus posiciones relativas en la memoria.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Apunta al primer elemento
int *end = numbers + 4;      // Apunta al último elemento

if (start < end) {
    printf("start comes before end in memory");
}

La comparación de punteros se vuelve especialmente potente en las condiciones de los bucles. En lugar de usar una variable de contador, puedes comparar la posición actual de tu puntero con un puntero objetivo para controlar cuándo debe detenerse el bucle. Esto permite crear código elegante y eficiente para recorrer matrices.

La idea clave es que ptr1 < ptr2 te indica que ptr1 apunta a un elemento que aparece antes en el arreglo que el elemento al que apunta ptr2. Esta relación hace que la comparación de punteros sea una opción natural para controlar bucles que procesan arreglos secuencialmente.

challenge icon

Desafío

Fácil

Escribe un programa en C que utilice la comparación de punteros para recorrer un arreglo y encontrar elementos dentro de un rango específico. Tu programa debe:

  1. Declarar un arreglo de enteros llamado scores con 8 elementos e inicializarlo con los valores {45, 78, 92, 63, 87, 34, 91, 56}
  2. Declarar dos punteros a enteros: start_ptr y end_ptr
  3. Configurar start_ptr para que apunte al primer elemento del arreglo
  4. Configurar end_ptr para que apunte al último elemento del arreglo utilizando aritmética de punteros
  5. Declarar un puntero llamado current_ptr e inicializarlo para que apunte al primer elemento
  6. Utilizar un bucle while con comparación de punteros (current_ptr <= end_ptr) para recorrer el arreglo
  7. Dentro del bucle:
    • Comprobar si el valor actual está entre 60 y 90 (inclusive)
    • Si el valor está dentro del rango, imprimir exactamente Value [value] is in range
    • Si el valor no está dentro del rango, imprimir exactamente Value [value] is out of range
    • Incrementar current_ptr para avanzar al siguiente elemento
  8. Después del bucle, utilizar la comparación de punteros para verificar que current_ptr ahora está más allá del final del arreglo, comprobando si current_ptr > end_ptr
  9. Si la condición es verdadera, imprimir exactamente Traversal complete

Tu salida debe mostrar los resultados en el siguiente formato:

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

Este desafío pone a prueba tu comprensión de los operadores de comparación de punteros en las condiciones de los bucles, el uso de la aritmética de punteros para establecer punteros de límite y cómo la comparación de punteros puede controlar el recorrido de un arreglo de manera más elegante que los bucles tradicionales basados en contadores.

Pruébalo tú mismo

#include <stdio.h>

int main() {
    // TODO: Escribe tu código a continuación
    
    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 Lógica y Flujo

Practica por tu cuenta: Compilador de C online