int main()
{
int iStrangeArrayOutter[11];
iStrangeArrayOutter[7] = 5;
testFunc (iStrangeArrayOutter);
return 0;
}
int testFunc (int iStrangeArray[3])
{
printf ("%d\r\n", iStrangeArray[7]);
return 0;
}
函数声明的int iStrangeArray[3]
部分揭示了什么?
答案 0 :(得分:2)
当用作函数参数时,数组会自动转换为指向其第一个元素的指针,因此该函数签名:
int testFunc(int iStrangeArray[3])
相当于:
int testFunc(int iStrangeArray[])
或
int testFunc(int *iStrangeArray)
忽略数组的大小,它仅作为程序员的信号,而不是编译器的信号。至于为什么,因为它是C标准所说的。
答案 1 :(得分:1)
这可能暗示读者iStrangeArray
的长度应为3,因此它可能就像API文档的一部分。
然而,就像编译器(或其他工具)无法验证的任何其他文档一样,当相关代码发展时,他们试图解释的文档和代码可能会变成异步(此时它看起来像是确切地说,在你的情况下发生了什么),这"文件记录"可能会误导,会让读者感到困惑。