【发布时间】:2016-06-02 04:47:29
【问题描述】:
在我们遗留的 C/C++ 代码中,我遇到了两个版本的签名
void foo1(double *vec, int n)
和
void foo2(double vec[], int n)
但是在方法内部对参数vec的处理没有区别例如:
void foo2(double vec[], int n){
for(int i=0;i<n;i++)
do_something(vec[i]);
}
第一个版本 (double *) 和第二个版本 (double ..[]) 有什么区别吗?在什么情况下应该优先选择一个版本?
编辑:在@Khaled.K 的提示之后,我尝试编译:
void foo(double *d, int n){}
void foo(double d[], int n){}
由于重新定义 void foo(double *d, int n) 而出现编译错误。所以double *vec 和double vec[] 的意思是一样的。
仍然悬而未决的问题是何时应该使用哪个版本。
【问题讨论】:
-
不,没有区别。在一个参数中
[]被调整为*。 -
@LưuVĩnhPhúc,他希望在将它们作为参数传递给函数时有所不同。
-
代码中的同一个函数是否存在两个签名?
-
@Khaled.K 不,有两种签名,用于不同的功能。谢谢,我调整了我的问题