Is there a difference between a pointer parameter and an array parameter?

前端 未结 2 1696
[愿得一人]
[愿得一人] 2021-01-18 10:19

void method(double *v)

void method(double v[5])

Is there any difference between these two?

Is the second one more specific,

2条回答
  •  野的像风
    2021-01-18 11:18

    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!

提交回复
热议问题