I think if anything, C has been a certain detriment to the field of
computer science!

One calls a function and the arguments are passed by value. Call a
function with an array as an argument, and feel free to modify its
contents!

so declaring an array as const prevents this, func(const double * a). I understand that this also helps the compiler make optimizations it cannot do when you don't use const. I think you could still modify the contents of the array by first copying the pointer though,

double * b = a;b[i] = something new.

So there's also the modifier "restrict", which I believe would prevent this, and again helps out the compiler do smart things. Others can probably confirm/correct this? Is it good practice to use these modifiers as often as possible/appropriate?

Certainly, C++ added the idea of reference, but I think Pascal
simplifies these concepts much better. Yet, Pascal seems to be relegated
to the status as a legacy language!

"There are two ways of constructing a software design. One way is to
make it so simple that there are obviously no deficiencies. And the other
way is to make it so complicated that there are no obvious deficiencies."