C喜欢数组语法?

kir*_*off 0 c c++ arrays syntax

这个语法是double x[]什么?

它是一种声明数组的C方式吗?

如果我有类似的功能

void evaluate(double x[], double *f)
{
   // evaluate
}
Run Code Online (Sandbox Code Playgroud)

我可以传递任何长度的参数x吗?

Jos*_*eld 5

数组类型的参数与指针完全相同.您无法真正将数组作为函数参数传递.但是,这种语法给出了一种错觉,你可以为了便于阅读.所以你的功能相当于:

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.结果是指向数组的第一个元素的指针.

所以是的,你确实可以传递任何长度的数组.实际上,您只是将指针传递给第一个元素.但是,如果需要,您还需要传递数组的长度.