你能在函数声明中声明一个固定长度的数组吗?

Can you declare a fixed-length array in a function declaration?

本文关键字:声明 数组 一个 函数      更新时间:2023-10-16

我正在读取一些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

这是一种误导性代码。这些参数从字面上看确实意味着char *longstr1(呃)。没有界限检查,什么都没有。可以将指针传递给任意长度的数组。看来你已经知道了。

现在,有人可能会争辩说这种方法是自我记录的,但我会说它是在记录一个谎言。如果指针"应该"具有特定的边界,则应在函数声明上方使用注释来记录,而不是向读者建议它将按类型强制执行。作者可能这么想!

最终,要真正找出为什么它是这样写的,你应该找到作者并询问他们。其他任何事情都是猜测。

这是一回事; 声明衰减为 char *longstr1 ,但对于阅读 API 的人来说,它需要正好 130 个字符的缓冲区,这些信息更丰富。