Las matrices y los punteros no son lo mismo en C, aunque están relacionados y pueden usarse de manera similar. Hasta ahora todos estamos de acuerdo.
Sin embargo, no veo por qué se incluyeron matrices en C, cuando los punteros podrían haber hecho su trabajo perfectamente.
No estoy diciendo que elimine la notación de matriz (por ejemplo, a [5] o int a [4] = {0,1,2,3};), que es bastante útil y conveniente. Pero podría tener esa misma notación trabajando sobre punteros (como es el caso), como una medida cosmética. Entonces, la notación de matriz no es una razón para tener matrices, ¡solo la notación!
La única diferencia que veo es que las matrices son punteros constantes, y el tamaño de la memoria a la que apuntan no se puede cambiar. Pero esto también se puede lograr con punteros, exactamente haciéndolos constantes (la memoria no sería de tamaño fijo, pero no estoy seguro de si esto es un problema).
Entonces, ¿por qué no tener solo punteros y dejar que el programador decida cómo debe comportarse el puntero (es decir, constante, no constante, tamaño fijo, tamaño variable, etc.)?
x = a + b * 2;
cuando podrías lograr lo mismo con una secuencia de expresiones simples como x = b; x*=2; x+=a;
?