c++ - double *vec 和 double vec[] 的区别

标签 c++ c

在我们遗留的 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 *vecdouble 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/

相关文章:

c++ - 在 "if" block 中分配字 rune 字

c++ - 我的 if 语句究竟有什么问题?

c - 邻接表 : Path counter nonfunctional

java - 在 openssl 的 native 代码中使用来自 java 的私钥

c++ - 将 1's and 0' 的数组值转换为二进制

c++ - Base64 转换器输出不正确

c++ - 如何将可变参数宏的所有参数连接成带引号的字符串?

c - C 语言中系统命令的服务器延迟

python - Python 中 libcurl 库导入错误

c++ - 在 win8 登录屏幕上运行应用程序