gpt4 book ai didi

c++ - 为什么 C 和 C++ 编译器在从未强制执行时允许函数签名中的数组长度?

转载 作者:IT老高 更新时间:2023-10-28 11:33:16 26 4
gpt4 key购买 nike

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

#include<iostream>
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])。还是有其他我不知道的意思?

最佳答案

这是将数组传递给函数的语法的一个怪癖。

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

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

允许这种语法的决定是在 1970 年代做出的,从那时起就引起了很多困惑......

关于c++ - 为什么 C 和 C++ 编译器在从未强制执行时允许函数签名中的数组长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22677415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com