我正在阅读一些 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(呃)。没有边界检查,什么都没有。您可以将指针传递给任意长度的数组。看来你已经知道这一点了。
现在,有人可能会说这种方法是 self 记录的,但我想说它是在记录一个谎言。如果指针“应该”有一个特定的界限,那么应该在函数声明上方用注释来记录这一点,而不是向读者建议它将由类型强制执行。 作者可能就是这么想的!
最终,要真正找出为什么这样写,您应该找到作者并询问他们。其他一切都是猜测。
关于c++ - 可以在函数声明中声明固定长度数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54447649/