在函数参数中使用指针或数组
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)
相同。
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)
相同。