在c ++函数中传递参数时,"double a []"和"double*a"之间有什么区别?

ipe*_*tta 0 c++

在c ++函数中传递参数时,"double a []"和"double*a"之间有什么区别(如果存在)?我的意思是,这两个功能是否相同?

void do_somethingA (double a[], size_t size_a)
{
    // ... do something
}

void do_somethingB (double *a, size_t size_a)
{
    // ... do something
}

int main()
{
    double X[] = {1.,2.,3.,4.,5.};
    double *Y;
    Y = new double[5];
    for(int i = 0; i < 5; i++)
        Y[i] = (double) i;
    do_somethingA(X,5);
    do_somethingA(Y,5);
    do_somethingB(X,5);
    do_somethingB(Y,5);
    delete [] Y;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码没有错误.我只是对此感到好奇,我找不到"google"它的方法,抱歉.

我将静态和动态数组作为参数传递给函数,其中一个使用"double a []"而另一个使用"double*a",一切都编译并执行正常.这只是风格问题吗?

cni*_*tar 5

在这种情况下,double a[]并被double *a定义为绝对,100%相同.这是一个C++问题,但C FAQ仍然是相关的.


从C++ 11标准:

8.3.5

在确定每个参数的类型之后,将"T数组"或"函数返回T" 类型的任何参数分别调整为"指向T的指针"或"指向函数返回T的指针".