Menu
Coddy logo textTech

Comparando Ponteiros

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

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

Quando você compara dois ponteiros, você 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 torna-se especialmente poderosa em condições de loop. Em vez de usar uma variável de contador, você pode comparar a posição atual do seu ponteiro com um ponteiro de destino para controlar quando o loop deve parar. Isso cria um código elegante e eficiente para a travessia de arrays.

A principal percepção é que ptr1 < ptr2 informa 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 um ajuste natural para controlar loops que processam arrays sequencialmente.

challenge icon

Desafio

Fácil

Escreva um programa em C que utilize 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. Configurar start_ptr para apontar para o primeiro elemento do array
  4. Configurar end_ptr para 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 "Value %d is in range"
    • Se o valor não estiver no intervalo, imprimir "Value %d is out of range"
    • Incrementar current_ptr para mover para o próximo elemento
  8. Após o loop, usar a comparação de ponteiros para verificar se current_ptr está agora além do final do array, verificando se current_ptr > end_ptr
  9. Se a condição for verdadeira, imprimir "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, o uso de aritmética de ponteiros para definir ponteiros de limite e como a comparação de ponteiros pode controlar a travessia de um array de forma mais elegante do que os loops tradicionais baseados em contadores.

Folha de consulta

Ponteiros podem ser comparados usando operadores relacionais: ==, !=, <, e >.

Ao comparar ponteiros, você está comparando seus endereços de memória. Isso é útil para determinar as posições relativas de elementos dentro do mesmo array.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Points to first element
int *end = numbers + 4;      // Points to last element

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

A comparação de ponteiros é particularmente poderosa em condições de loop, permitindo que você controle loops comparando posições de ponteiros em vez de usar variáveis de contador:

int *current_ptr = numbers;
int *end_ptr = numbers + 4;

while (current_ptr <= end_ptr) {
    // Process current element
    current_ptr++;  // Move to next element
}

A expressão ptr1 < ptr2 significa que ptr1 aponta para um elemento que aparece antes no array do que o elemento para o qual ptr2 aponta.

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 Logic & Flow