1) float scalar_product(float *x, float *y)
是否与 2) float scalar_product(float x[], float y[])
相同?
我得到了一些 float a[3], b[3];
,其中包含一些 vector ,该函数应该给出标量积。
凭借我的 Java 背景,我编写了 2)
函数(在纸上),但示例解决方案使用了带有指针的 1)
。
所以我的问题:
它们相同吗?如果不是,有什么区别,我应该在什么时候使用哪个?
是的,这两个版本实际上是相同的,因为当数组作为函数参数传递时,它们本质上会退化为指向第一个元素的指针。
因此,将函数参数设为指针或数组不会有任何行为变化。
相关,C11
,章节 §6.7.6.3,函数声明符
A declaration of a parameter as ‘‘array of type’’ shall be adjusted to ‘‘qualified pointer to
type’’ [...]
因此,float scalar_product(float x[], float y[])
最终与 float scalar_product(float *x, float *y)
相同。