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

前端 未结 2 1695
[愿得一人]
[愿得一人] 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 10:59

    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 returning T” is adjusted to be “pointer to T” or “pointer to function returning T,” respectively.

    0 讨论(0)
  • 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!

    0 讨论(0)
提交回复
热议问题