你能在函数声明中声明一个固定长度的数组吗?
Can you declare a fixed-length array in a function declaration?
我正在读取一些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 个字符的缓冲区,这些信息更丰富。
相关文章:
- 在类c++中使用new声明数组
- 为什么不能用常量表达式声明数组?
- 声明数组后我无法添加数组
- 可以使用<size_t>static_const(),std::as_const()或static_cast<const size_t>()来声明数组吗?
- 变量未在此范围内声明 数组线性搜索
- 在类中声明数组. C++
- T D[N] 总是声明数组类型的对象吗?
- 如何使用智能指针在二维上声明数组?
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 在C 类中声明数组数据
- 声明数组时出现 SIGSEGV 错误,而不创建新的 int[size]
- 如何在不初始化常量的情况下声明数组?
- 使用函数在函数中声明数组值
- 以C++声明数组的时间复杂度
- 通过传递数组长度在函数内声明数组
- 通过引用传递数组,而不在函数声明中显式声明数组的大小
- 声明数组和打印[错误?]
- 用内核参数在CUDA内核中声明数组
- 如何在不依赖#Define的情况下转发声明数组大小
- 声明数组已经填充了零