指针参数和数组参数之间有区别吗?

时间:2014-03-16 14:00:12

标签: c++ arrays pointers types

void method(double *v)

void method(double v[5])

这两者有什么区别吗?

第二个是否更具体,因为v被限制为5个元素的长度?

2 个答案:

答案 0 :(得分:8)

声明为参数类型时的数组,衰减为指针类型。在您的示例中,

void method(double v[5]);

5根本没有扮演任何角色,无关紧要可能完全忽略,而是写下来:

void method(double v[]);

与前一个声明完全相同。由于它衰减成指针,所以上面两个完全相同:

void method(double *v); //because array decays to pointer, anyway

即,以下所有内容都是相同功能的声明:

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完全相同。没有任何区别。

请注意,以下内容有所不同:

void f(double (&v)[5]); 

它声明了一个函数,它可以采用大小完全 5的双精度数组。如果你传递任何其他大小的数组(或者你传递指针),它将给出编译错误!

答案 1 :(得分:4)