C++ 传递指向需要数组的函数的指针是否合法?

C++ 传递指向需要数组的函数的指针是否合法?,c++,c++11,C++,C++11,以代码为例: double func(double a[3]) { /* do something with a and return */ } int main(void) { std::vector<double> test(LARGE_NUM_DIVISIBLE_BY_3); for (size_t i = 0; i < LARGE_NUM_DIVISIBLE_BY_3 / 3; ++i) { test[3 * i] =

以代码为例:

double func(double a[3])
{
    /* do something with a and return */
}

int main(void)
{
    std::vector<double> test(LARGE_NUM_DIVISIBLE_BY_3);
    for (size_t i = 0; i < LARGE_NUM_DIVISIBLE_BY_3 / 3; ++i)
    {
        test[3 * i] = /* some random double */;
        test[3 * i + 1] = /* some random double */;
        test[3 * i + 2] = /* some random double */;

        double val = func(&test[3 * i]);
    }
}
double func(双a[3])
{
/*做点有意义的事,然后回报*/
}
内部主(空)
{
std::向量测试(大数除以3);
对于(大小i=0;i

这是C++11中定义的行为吗?也就是说,我可以将指针(
&test[3*I]
)传递给需要数组(
double func(double a[3])
)的函数吗?我知道如果我换一种方式(即,将数组传递给需要指针的函数),数组将衰减为指针-反之亦然吗?

你不能这样传递数组。任何参数声明,如
double a[]
(带或不带大小)都由编译器转换为指针
double*a

数组自然衰减为指向第一个元素的指针。所以如果你有一个实际的数组(而不是向量),比如

然后在需要指针时传递它(如
test
),将指针传递到它的第一个元素(
&test[0]


但是对于不可能的向量,您必须像以前一样显式地传递指针。

否,
a
将不会返回,只用于计算返回值,您正在说数组并显示向量。这就是你的意思吗?@NathanOliver:我不同意重复的标签-我想知道这个问题的相反情况是否合法,正如我已经明确指出的那样。被复制者解释说是的
void by_value(const T*array)//const T array[]的意思是相同的
@NathanOliver:它实际上在代码块前面明确表示“当传入数组时”(而我想传入指针),但我相信它也可以以另一种方式工作。这也是我的直觉。
double test[SOME_SIZE];