在函数参数中使用指针或数组

Use pointer or array in function parameters

1) float scalar_product(float *x, float *y)2) float scalar_product(float x[], float y[])一样吗?

我得到了一些 float a[3], b[3];,其中包含一些向量,该函数应该给出标量积。

根据我的 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) 相同。