int a = 2;
La caja representa el espacio ocupado por la variable en el stack.
int a[3] = {1, 2, 3};
La caja representa el array y cada división representa uno de sus tres elementos.
int a = 2;
int* p = &a;
El puntero p almacena la dirección de memoria de a.
a = 2 y *p = 2.
int* p = new int(5);
STACK
HEAP
En el stack, p guarda la dirección del valor reservado en el heap.
int* p = new int[3]{1, 2, 3};
STACK
HEAP
El puntero p guarda la dirección del primer elemento de un bloque contiguo de tres valores.
struct Punto {
int x;
int y;
};
Punto p;
El casillero de p se divide en dos campos internos: x e y.
int sumar(int a, int b) {
return a + b;
}
sumar(2, 3);
struct Nodo {
int valor;
Nodo* siguiente;
};
Nodo* cabeza = new Nodo{10, nullptr};
cabeza->siguiente = new Nodo{20, nullptr};
STACK
HEAP
cabeza guarda la dirección del primer nodo; cada nodo contiene un valor y la dirección del siguiente.
int factorial(int n) {
if (n == 1) return 1;
return n * factorial(n - 1);
}
factorial(3);
Cada llamada recursiva crea un nuevo marco en el stack; cuando llega a n = 1, los marcos regresan en sentido inverso.