可以在函数声明中声明定长数组吗?

时间:2019-01-30 18:55:06

标签: c++ arrays allocation

我正在阅读一些C ++代码(SGP4,卫星传播代码),并且发现了以下函数声明:

void twoline2rv(char longstr1[130], char longstr2[130], char typerun,
            char typeinput, char opsmode, gravconsttype whichconst,
            double &startmfe, double &stopmfe, double &deltamin,
            elsetrec &satrec);

我想知道在函数参数中说char longstr1[130]是什么意思。为什么编译器需要知道数组长130个字节?为什么不说char *longstr1

2 个答案:

答案 0 :(得分:2)

这是一种误导性代码。这些参数从字面上看确实表示char *longstr1(ugh)。没有边界检查,什么也没有。您可以将指针传递到任意长度的数组。似乎您已经知道这一点。

现在,有人可能会争辩说这种方法是自我记录,但我会说它是在记录谎言。如果指针“应该”有一个特定的界限,那么应该在函数声明的上方加上注释,而不是向读者暗示它将由类型强制执行。 author 可能会认为!

最终,要真正找出为什么以这种方式编写,应该跟踪作者并询问他们。其他都是猜测。

答案 1 :(得分:1)

是同一回事;声明会衰减为char *longstr1,但对于阅读API的人来说,它提供了更多信息,因为它期望缓冲区的长度为130个字符。