数组类型的参数与指针完全相同.您无法真正将数组作为函数参数传递.但是,这种语法给出了一种错觉,你可以为了便于阅读.所以你的功能相当于:
void evaluate(double *x, double *f)
{
// evaluate
}
Run Code Online (Sandbox Code Playgroud)
从ISO/IEC 14882:2011的§8.3.5/ 5开始:
在确定每个参数的类型之后,将"T数组"或"函数返回T"类型的任何参数分别调整为"指向T的指针"或"指向函数返回T的指针".
表示数组的表达式将衰减为指向其第一个元素的指针,因此您仍然可以执行此操作:
void evaluate(double x[]);
int array[] = {1, 2, 3, 4, 5};
evaluate(array); // The array decays to a pointer to its first element
Run Code Online (Sandbox Code Playgroud)
从§4.2开始:
可以将"数组的NT"或"未知的T的数组"类型的左值或右值转换为"指向T的指针"的prvalue.结果是指向数组的第一个元素的指针.
所以是的,你确实可以传递任何长度的数组.实际上,您只是将指针传递给第一个元素.但是,如果需要,您还需要传递数组的长度.