这是我在学习期间发现的:
#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]
)。还是还有我不知道的其他含义?
typedef
with数组类型,它也适用。因此,参数类型中的“指向指针的衰变”不仅仅是将语法糖替换[]
为*
,它实际上是在类型系统中进行的。这对于某些va_list
可能使用数组或非数组类型定义的标准类型具有现实意义。
int dis(char (*a)[1])
。然后,将指针传递给数组:dis(&b)
。如果您愿意使用C ++中不存在的C功能,那么您也可以说诸如void foo(int data[static 256])
和int bar(double matrix[*][*])
,但这是蠕虫的另一种形式。