在函数定义中的形式参数之间,例如:
void change (int *s)
{
s[0] = 42;
}
另一个定义:
void change (int s[])
{
s[0] = 42;
}
我认为它们是相同的,因为*(a+0)
与a[0]
相同。
是否有理由偏爱另一个?请注意,首选项适用于编码风格。
答案 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]
是一种简单指定指针必须指向有效对象的便捷方式。