Recorrer una matriz con punteros?

Estoy tratando de aprender punteros, que es un verdadero PITA cuando no lo entiendes completamente.

Estoy intentando imprimir todos los elementos de la matriz, pero solo se imprime el primer elemento.

#include  int count(const int* numbers, int size) { for(; numbers < size; numbers++) { printf("%d", *numbers); } } int main(void) { int numbers[] = {3, 4, 6, 3, 46}; int result = count(numbers, 5); printf("%d\n", result); return 0; } 

El bucle en la función de recuento no parece funcionar correctamente, ya que solo se está ejecutando en bucle una vez, pero no puedo entender por qué.

Los numbers < size comparación numbers < size es incorrecto.

Tienes 3 opciones:

  1. Tener una variable de índice separada:

     int count; for(count = 0; count < size; count++) { printf("%d", numbers[count]); } 
  2. Tener un puntero "cursor" separado:

     const int * const end = numbers + size; for(; numbers < end; numbers++) { printf("%d", *numbers); } 
  3. size decremento:

     for(; size != 0; size--, numbers++) { printf("%d", *numbers); } 

la función count() debe ser

 int count(const int* numbers, int size) { for(; size > 0; numbers++, size--) { printf("%d", *numbers); } } 

Debido a que los números son un puntero, contiene una dirección. size es un int y es igual a 5 . La dirección no es 5, ni está cerca de 5.

Puede guardar la dirección de inicio y calcular el desplazamiento:

 int count(const int* numbers, int size) { const int* start = numbers; for(; (int)(numbers - start) < size; numbers++) { printf("%d\n", *numbers); } }