开发者社区> 问答> 正文

为什么C和C ++编译器从不强制执行函数签名中的数组长度?

这是我在学习期间发现的:

#include using namespace std; int dis(char a[1]) { int length = strlen(a); char c = a[2]; return length; } int main() { char b[4] = "abc"; int c = dis(b); cout << c; return 0; }
因此,在变量中int dis(char a[1]),[1]似乎无法执行任何操作,并且根本不起作用 ,因为我可以使用a[2]。就像int a[]还是char *a。我知道数组名称是一个指针以及如何传达一个数组,所以我的难题与这部分无关。

我想知道的是为什么编译器允许这种行为(int a[1])。还是还有我不知道的其他含义?问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 01:14:44 488 0
1 条回答
写回答
取消 提交回答
  • 这是将数组传递给函数的语法的怪癖。

    实际上,不可能在C中传递数组。如果编写的语法看起来像应该传递该数组,则实际发生的是改为传递了指向数组第一个元素的指针。

    由于指针不包含任何长度信息,[]因此函数形式参数列表中的内容实际上将被忽略。

    自从1970年代就做出了允许使用这种语法的决定,从那以后引起了很多混乱。

    2020-02-07 01:14:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载

相关实验场景

更多