从函数C ++返回数组

时间:2015-07-25 14:33:57

标签: c++ arrays function

鉴于此功能:

 int * myFunction(){

        static int result[3]; 
        result[0] = 1;
        result[1] = 2;
        result[2] = 3;

        return result;

    }

如何在main方法中将return [1]的值赋给变量?

1 个答案:

答案 0 :(得分:4)

尝试以下

int main()
{
   int x = myFunction()[1];

   //...

或者

int main()
{
   int *p = myFunction(); 
   int x = p[1];

   //...

至于问题标题中的问题,例如你可以写

#include <iostream>

int ( &myFunction() )[3]
{
        static int result[3] = { 1, 2, 3 }; 
        //...
        return result;
}

int main( void )
{
    decltype( auto ) a = myFunction();

    std::cout << sizeof( a ) << std::endl;

    for ( int x : a ) std::cout << x << ' ';
    std::cout << std::endl;
}    

程序输出可能看起来像

12
1 2 3 

如果您的编译器不支持C ++ 2014,那么声明

    decltype( auto ) a = myFunction();

可以替代

    int ( &a )[3] = myFunction();

另一种方法是使用std::array而不是数组。例如

#include <iostream>
#include <array>

std::array<int, 3> myFunction()
{
        static std::array<int, 3> result = { { 1, 2, 3 } }; 
        //...

        return result;
}

int main( void )
{
    auto a = myFunction();

    std::cout << sizeof( a ) << std::endl;

    for ( int x : a ) std::cout << x << ' ';
    std::cout << std::endl;
}    

在这种情况下,函数中result没有必要具有静态存储持续时间。