函数签名中的数组长度:语法好奇心
尽管 C 和 C 中的函数签名中明显存在数组长度,但这些长度被有效地忽视。这种行为让开发人员感到困惑,并引发了对其用途的疑问。
数组长度控制的错觉
考虑以下 C 代码片段:
#include <stdio.h> int dis(char a[1]) { return strlen(a); } int main() { char b[4] = "abc"; int c = dis(b); printf("%d\n", c); return 0; }
在此代码中,dis 函数需要一个长度为 1 ([1]) 的字符数组。然而,用户传递了一个长度为 4 (b) 的数组。令人惊讶的是,代码编译并执行时没有出现任何错误。这表明函数签名中指定的数组长度并未强制执行。
数组传递的真实本质
在 C 和 C 中,数组不是按值传递的。相反,传递的是指向数组第一个元素的指针。因此,函数签名中数组长度的规范变得多余,因为此信息可以从指针导出。
历史原理
允许的决定函数签名中的数组长度规范是在 C 的早期制定的,这可能是由于早期语言的遗留问题。尽管出于兼容性原因保留了此语法,但它已成为开发人员困惑的根源。
结论
C 和 C 函数签名中存在数组长度是一个语法怪癖,实际上并不强制数组长度。此行为是由于底层传递机制造成的,该机制涉及指向数组元素的指针而不是数组本身。虽然这种语法似乎没有必要,但它的历史渊源已经巩固了它在现代 C 和 C 编程语言中的地位。
以上是为什么 C 和 C 函数签名中的数组长度似乎被忽略?的详细内容。更多信息请关注PHP中文网其他相关文章!