我正在阅读一些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
?
答案 0 :(得分:2)
这是一种误导性代码。这些参数从字面上看确实表示char *longstr1
(ugh)。没有边界检查,什么也没有。您可以将指针传递到任意长度的数组。似乎您已经知道这一点。
现在,有人可能会争辩说这种方法是自我记录,但我会说它是在记录谎言。如果指针“应该”有一个特定的界限,那么应该在函数声明的上方加上注释,而不是向读者暗示它将由类型强制执行。 author 可能会认为!
最终,要真正找出为什么以这种方式编写,应该跟踪作者并询问他们。其他都是猜测。
答案 1 :(得分:1)
是同一回事;声明会衰减为char *longstr1
,但对于阅读API的人来说,它提供了更多信息,因为它期望缓冲区的长度为130个字符。