在我们遗留的 C/C++ 代码中,我遇到了两个版本的签名
void foo1(double *vec, int n)
和
void foo2(double vec[], int n)
但是在方法内部对参数 vec
的处理没有区别 e.g.:
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[]
意思是一样的。
仍然悬而未决的问题是什么时候应该使用哪个版本。
最佳答案
是一样的。来自标准:
After determining the type of each parameter, any parameter of type “array of T” or of function type T is adjusted to be “pointer to T”
所以没有区别。我会使用 *
而不是 []
来避免混淆,除非它是类似 char* argv[]
的东西,否则它可能是可以通过的。
关于c++ - double *vec 和 double vec[] 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37582859/