参数声明[]和*(数组)

时间:2011-02-27 16:00:43

标签: c arrays

在函数定义中的形式参数之间,例如:

void change (int *s)
{   
    s[0] = 42;
}

另一个定义:

void change (int s[])
{   
    s[0] = 42;
}

我认为它们是相同的,因为*(a+0)a[0]相同。

是否有理由偏爱另一个?请注意,首选项适用于编码风格。

3 个答案:

答案 0 :(得分:6)

是的,它们完全一样。声明为数组的所有函数参数都将调整为相应的指针类型。

就个人而言,我更喜欢前者,它实际上使它看起来像一个指针声明,就像它在两种情况下一样。

答案 1 :(得分:4)

我更喜欢第二个,因为很明显你打算使用s作为数组。 (即使它在技术上是一个指针)

我认为这只是另一个主观的事情。

答案 2 :(得分:3)

在当前的C语言中,有一种情况可能会有所不同。 C99允许以下内容:

void change (int s[static 2])
{   
    s[0] = 42;
}

[static 2]对指针传递的函数的接口施加约束,s[0]s[1]访问类型的有效对象int。特别是,接口不允许NULL指针。

请注意,[static 1]是一种简单指定指针必须指向有效对象的便捷方式。