void method(double *v)
void method(double v[5])
这两个有什么区别吗?
第二种更具体吗,比如v
被限制为长度为5的元素数组?
当数组被声明为参数类型时,会转化成指针类型。在你的例子中,
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
所有的内容完全相同,没有任何区别。
但请注意以下内容是不同的:
void f(double (&v)[5]);
它声明了一个函数,可以接受大小为恰好5
的双精度数组。如果您传递任何其他大小的数组(或者如果您传递指针),它将导致编译错误!
double v[5]
视为指针。大小5
被忽略了,最多只是程序员的信号。[ ... ] 确定每个参数的类型后,任何类型为“T
数组”或“返回T
的函数”的参数都会被调整为“T
指针”或“返回T
的函数指针”,分别。