Il nome di una variabile, sia per il C che anche per tutti gli altri linguaggi, non è altro che un identificatore del puntatore alla zona di memoria del dato. Detto questo, se facciamo un esempio, ed utilizziamo una variabile String che contiene una determinata stringa (ovvero una sequenza di caratteri alfanumerici, ovvero una sequenza di "char"), il nome che utilizzi nella dichiarazione non è altro che un identificativo al punto iniziale in memoria dell'oggetto Stringa (forse l'esempio su String è un pò fuori ambito, dato che questo oggetto è un componente più complesso di una semplice sequenza di caratteri); in fin dei conti, non fai altro che dare un nome univoco al puntatore, rendendone più semplice la gestione all'interno del codice. In alternativa, sarebbe abbastanza complicato utilizzare l'indirizzo fisico in memoria, cosa che viene fatta dal linguaggio, sostituendo la tua variabile con l'indirizzo fisico in fase di compilazione. Inoltre la dichiarazione rende la cosa dinamica, dando al compilatore la facoltà di decidere dove posizionare l'area preposta al contenimento dell'oggetto; è ovvio pensare che se la cosa fosse fatta manualmente, sarebbe abbastanza pesante e anche piuttosto legata alla macchina su cui gira l'applicazione.
Questa cosa, anticamente, veniva fatta proprio in questo modo, ma questo sottintendeva una conoscenza profonda del sistema e dell'hardware, e una profonda attenzione all'utilizzo della memoria.