在函数参数数组中放置一个大小的意义是什么?

时间:2014-04-23 09:14:24

标签: c

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]部分揭示了什么?

2 个答案:

答案 0 :(得分:2)

当用作函数参数时,数组会自动转换为指向其第一个元素的指针,因此该函数签名:

int testFunc(int iStrangeArray[3])

相当于:

int testFunc(int iStrangeArray[])

int testFunc(int *iStrangeArray)

忽略数组的大小,它仅作为程序员的信号,而不是编译器的信号。至于为什么,因为它是C标准所说的。

答案 1 :(得分:1)

这可能暗示读者iStrangeArray的长度应为3,因此它可能就像API文档的一部分。

然而,就像编译器(或其他工具)无法验证的任何其他文档一样,当相关代码发展时,他们试图解释的文档和代码可能会变成异步(此时它看起来像是确切地说,在你的情况下发生了什么),这"文件记录"可能会误导,会让读者感到困惑。