Credo che la tua domanda non sia formulata in modo sensato. Penso che quello che stai veramente chiedendo sia: "È bello capire la memoria e i puntatori".
Dì in C ++ abbiamo un cane di classe.
Dog a = Dog(); // On stack
Dog *b = new Dog(); // On heap.
'a' contiene un valore che è un Cane.
'b' contiene un valore che è un indirizzo di memoria presente nell'heap (che troveremo un cane nascosto lì).
'b' occupa spazio nello stack per contenere l'indirizzo in modo che occupi solo le dimensioni di un puntatore nello stack.
'a' occupa spazio sulla pila delle dimensioni di un cane.
Diciamo che vogliamo che i cani abbaiano ora ...
a.bark();
b->bark();
Dobbiamo trattare i nostri cani in modo diverso.
b->bark();
(*b).bark(); // same as above
Dobbiamo dire: "Vai dove b vive e dillo di abbaiare". La maggior parte delle persone non fa la differenza e vuole dire.
b.bark(); // Won't work, might not even build.
Perché un puntatore è solo una posizione (che è solo un numero). E un numero non può abbaiare. ('a' is a Dog. 'b' è la posizione di un altro cane.)
// We can even change what dog b points to.
b = &a; // b will now hold the location to dog 'a'.
// we will also have a dog that shall be lost forever D=!
b->bark();
a.bark(); // dog 'a' has now barked twice in a row since b points to a.
Hai bisogno di capire questo? Dipende dalle lingue e dagli strumenti che usi. In linguaggi come Java e Python tutto questo è forzato su te senza che tu lo sappia, è gestito dalla lingua in modo da non notarlo.
È bello capirlo? Perché sì ... sì lo è.
Devi tenerlo attivo nella tua mente? Bene ... consente di allocare un array.
int stackArray[INT_MAX]; // Probably overflows the stack
int *heapArray = new int[INT_MAX]; // Allocates it all on the heap
// or returns NULL if it cannot find the space.
Quindi sì. A volte.
(stackArray sarà in realtà un puntatore però ... alla memoria nello stack)