void method(double *v)
void method(double v[5])
Is there any difference between these two?
Is the second one more specific,
No and no.
When in function arguments, they are the same, the compiler treats the argument double v[5]
as a pointer. The size 5
is ignored, it's at most a signal for the programmer.
C++ 11 §8.3.5 Functions Section 3
[ ... ] After determining the type of each parameter, any parameter of type “array of
T
” or “function returningT
” is adjusted to be “pointer toT
” or “pointer to function returningT
,” respectively.
Arrays when declared as parameter types, decay to the pointer types. In your example,
void method(double v[5]);
Here 5
doesn't play any role at all, it is so insignificant that you may omit it altogether, and write this instead:
void method(double v[]);
which is exactly same as the previous declaration. Since it decays into pointer, so the above two are exactly same as:
void method(double *v); //because array decays to pointer, anyway
That is, all the following are declarations of the same function:
void method(double v[5]); //ok : declaration
void method(double v[]); //ok : redeclaration of the above
void method(double *v); //ok : redeclaration of the above
ALL are exactly same. No difference at all.
Note that the following is different however:
void f(double (&v)[5]);
It declares a function which can take array of doubles of size exactly 5
. If you pass array of any other size (or if you pass pointers), it will give compilation error!