这是我在学习期间发现的:
#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
这是将数组传递给函数的语法的怪癖。
实际上,不可能在C中传递数组。如果编写的语法看起来像应该传递该数组,则实际发生的是改为传递了指向数组第一个元素的指针。
由于指针不包含任何长度信息,[]因此函数形式参数列表中的内容实际上将被忽略。
自从1970年代就做出了允许使用这种语法的决定,从那以后引起了很多混乱。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。