0Pricing
C++ Academy · Lección

Desreferenciación y aritmética de punteros

Lea memoria mediante punteros y recorra arrays con aritmética de punteros.

Desreferenciación y aritmética de punteros es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

Lectura a través de un puntero

El operador unario * lee el valor al que apunta el puntero.

int x = 42;
int* p = &x;
std::cout << *p;   // 42

Escritura a través de un puntero

También puede utilizar *p en el lado izquierdo de una asignación para escribir en el destino.

*p = 100;
std::cout << x;   // 100

El operador flecha

Para los punteros a estructuras o clases, p->member es una abreviatura de (*p).member. Utilice la flecha; es la convención habitual.

struct Point { int x, y; };
Point pt{3, 4};
Point* p = &pt;
std::cout << p->x;   // 3

Conceptos básicos de la aritmética de punteros

Puede sumar o restar enteros a los punteros. El resultado avanza en pasos del tamaño del elemento, no en bytes.

int a[5] = {10, 20, 30, 40, 50};
int* p = a;        // points to a[0]
p = p + 2;         // now points to a[2]
std::cout << *p;   // 30

Recorrido de un array

La aritmética de punteros imita la indexación. a[i] y *(a + i) son idénticos, y p[i] funciona con cualquier puntero.

int a[] = {1, 2, 3, 4};
int* p = a;
for (int i = 0; i < 4; ++i) {
    std::cout << *(p + i) << " ";
}

Diferencia entre dos punteros

Restar dos punteros que apuntan al mismo array proporciona la distancia en elementos; el tipo es std::ptrdiff_t.

int a[5];
int* first = a;
int* last  = a + 5;
std::ptrdiff_t len = last - first;  // 5

Comparación de punteros

Puede comparar punteros para comprobar la igualdad con == y !=, y establecer un orden con < únicamente cuando apuntan al mismo array.

Iteración con punteros

La iteración idiomática al estilo de C utiliza dos punteros: uno al principio y otro al final.

int a[] = {1, 2, 3, 4, 5};
for (int* p = a; p != a + 5; ++p) {
    std::cout << *p << " ";
}

Se permite apuntar más allá del final

Puede calcular un puntero situado una posición después del último elemento (el puntero «end»), pero desreferenciarlo tiene un comportamiento indefinido.

Errores habituales de la aritmética de punteros

Errores comunes:

  • Superar los límites del array
  • Mezclar tipos de puntero (int* + char*)
  • Olvidar que la aritmética se realiza en unidades de elementos, no de bytes

Prefiera iteradores o rangos

El C++ moderno favorece los iteradores y la biblioteca de rangos frente a la aritmética de punteros sin formato. Los punteros siguen siendo importantes para las API de C y el código de muy bajo nivel.

Comprobación rápida

Si p es un int* que apunta al principio de un entero de 4 bytes, ¿a qué apunta p + 1?

Resumen

*p lee o escribe el destino. p->member accede a un miembro de una estructura. La aritmética de punteros avanza en pasos del tamaño del elemento. Utilícela con cuidado: en el código moderno, los iteradores y los rangos suelen ser una opción más segura.

Preguntas frecuentes

¿La lección «Desreferenciación y aritmética de punteros» es gratis?

Sí — el texto completo de «Desreferenciación y aritmética de punteros» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Desreferenciación y aritmética de punteros»?

Lea memoria mediante punteros y recorra arrays con aritmética de punteros. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Desreferenciación y aritmética de punteros»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Punteros sin formato y operador de dirección
  2. Desreferenciación y aritmética de punteros
  3. nullptr y seguridad frente a punteros nulos
  4. Cuándo usar punteros frente a referencias
← Volver a C++ Academy