void method(double *v)
void method(double v[5])
这两者有什么区别吗?
第二个是否更具体,因为v
被限制为5个元素的长度?
答案 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)