Non lo so per certo, ma sarei disposto a scommettere che la risposta è perché gli inventori di C si sono esauriti (o quasi esauriti) di personaggi.
L'intenzione originaria era che il linguaggio usasse i simboli per gli operatori, e anche che la lingua debba essere espressa all'interno della cosiddetta tabella ASCII "inferiore", che consiste di valori ASCII da 0 a 127.
I primi 31 valori sono caratteri di controllo non stampabili, quindi ci rimane questo:
!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
'abcdefghijklmnopqrstuvwxyz{|}~
Rimuovi lo spazio e tutti i caratteri necessari per gli identificatori, (che sono tutte lettere, tutti i numeri e il trattino basso,) e ci rimane questo:
!"#$%&'()*+,-./:;<=>?@[\]^
{|}~
Rimuovi parentesi, parentesi graffe e parentesi graffe, così come il backtick ('), che non è sufficientemente dissimile dalla singola citazione, e ci rimane questo:
!"#$%&'*+,-./:;<=>?@\^|~
Rimuovi la punteggiatura che è fondamentale per la sintassi della lingua, ("# ',.:;?) e ci rimane questo:
!$%&*+-/<=>@\^|~
Rimuovi la e commerciale (&), che sta per "prendere l'indirizzo di" qualcosa, e che deve quindi essere nettamente diversa da qualsiasi cosa che abbia a che fare con i puntatori, così come i confronti, (< = >) , esclamativo (!), più (+) e meno (-), che sono operazioni valide da eseguire sui puntatori e ci rimane questo:
$%*/@\^|~
Non sono sicuro del motivo per cui il simbolo del dollaro e l'at-sign non sono stati considerati; forse si pensava che fosse un po 'troppo voluminoso per fare un uso frequente del codice. Quindi, portali fuori e ci rimangono questi:
%*/\^|~
Come puoi vedere, tutti i caratteri precedenti sono usati come operatori per varie operazioni aritmetiche e logiche in C, il che significa che hanno dovuto riutilizzarne uno come carattere per i puntatori di dichiarazione e dereferenziamento.
Hanno scelto l'asterisco (*), che è una scelta decente perché in qualche modo porta la nozione di un "punto", e poiché la moltiplicazione non è una delle operazioni che sono valide per eseguire sui puntatori.
Potrebbero aver scelto anche il segno di omissione (^), (che sta per OR esclusivo), ma non penso che sia un grosso problema e, chiaramente, le loro opzioni erano molto limitate.