Menu
CoddyTech

Comparando Ponteiros

Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 10 de 63.

Você aprendeu a percorrer arrays usando aritmética de ponteiros. Agora vai descobrir que os ponteiros também podem ser comparados usando os mesmos operadores relacionais que você usa com variáveis comuns: ==, !=, < e >.

Quando você compara dois ponteiros, está comparando seus endereços de memória. Isso é particularmente útil quando ambos os ponteiros apontam para elementos dentro do mesmo array, pois permite determinar suas posições relativas na memória.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Aponta para o primeiro elemento
int *end = numbers + 4;      // Aponta para o último elemento

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

A comparação de ponteiros se torna especialmente poderosa nas condições de loop. Em vez de usar uma variável de contador, você pode comparar a posição atual do ponteiro com um ponteiro-alvo para controlar quando o loop deve parar. Isso cria um código elegante e eficiente para percorrer arrays.

A principal descoberta é que ptr1 < ptr2 indica que ptr1 aponta para um elemento que aparece antes no array do que o elemento para o qual ptr2 aponta. Essa relação torna a comparação de ponteiros uma escolha natural para controlar loops que processam arrays sequencialmente.

challenge icon

Desafio

Fácil

Escreva um programa em C que use a comparação de ponteiros para percorrer um array e encontrar elementos dentro de um intervalo específico. Seu programa deve:

  1. Declarar um array de inteiros chamado scores com 8 elementos e inicializá-lo com os valores {45, 78, 92, 63, 87, 34, 91, 56}
  2. Declarar dois ponteiros para inteiros: start_ptr e end_ptr
  3. Fazer start_ptr apontar para o primeiro elemento do array
  4. Fazer end_ptr apontar para o último elemento do array usando aritmética de ponteiros
  5. Declarar um ponteiro chamado current_ptr e inicializá-lo para apontar para o primeiro elemento
  6. Usar um loop while com comparação de ponteiros (current_ptr <= end_ptr) para percorrer o array
  7. Dentro do loop:
    • Verificar se o valor atual está entre 60 e 90 (inclusive)
    • Se o valor estiver no intervalo, imprimir exatamente Value [value] is in range
    • Se o valor não estiver no intervalo, imprimir exatamente Value [value] is out of range
    • Incrementar current_ptr para avançar para o próximo elemento
  8. Após o loop, usar a comparação de ponteiros para verificar se current_ptr agora está além do final do array, verificando se current_ptr > end_ptr
  9. Se a condição for verdadeira, imprimir exatamente Traversal complete

Sua saída deve exibir os resultados no seguinte 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 desafio testa sua compreensão dos operadores de comparação de ponteiros em condições de loop, do uso de aritmética de ponteiros para definir ponteiros de limite e de como a comparação de ponteiros pode controlar a travessia de arrays de forma mais elegante do que loops tradicionais baseados em contadores.

Experimente você mesmo

#include <stdio.h>

int main() {
    // TODO: Escreva seu código abaixo
    
    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 Lógica e Fluxo

Pratique por conta própria: Compilador de C online