So you can do this:
void foo(const int * const pIntArray, const unsigned int size);
Which says that the pointer coming is read-only and the integer’s it is pointing to are read-only.
You can access this inside the function like so:
blah = pIntArray[0]
You can also do the following declaration:
void foo(const int intArray[], const unsigned int size);
It is pretty much the same but you could do this:
intArray = &intArray[1];
Can I write:
void foo(const int const intArray[], const unsigned int size);
Is that correct?
No, your last variant is not correct. What you are trying to do is achieved in C99 by the following new syntax
which is equivalent to
That
[const]syntax is specific to C99. It is not valid in C89/90.Keep in mind that some people consider top-level cv-qualifiers on function parameters “useless”, since they qualify a copy of the actual argument. I don’t consider them useless at all, but personally I don’t encounter too many reasons to use them in real life.