【发布时间】:2015-07-25 14:33:56
【问题描述】:
给定这个函数:
int * myFunction(){
static int result[3];
result[0] = 1;
result[1] = 2;
result[2] = 3;
return result;
}
如何将 return[1] 的值分配给 main 方法中的变量?
【问题讨论】:
给定这个函数:
int * myFunction(){
static int result[3];
result[0] = 1;
result[1] = 2;
result[2] = 3;
return result;
}
如何将 return[1] 的值分配给 main 方法中的变量?
【问题讨论】:
试试下面的
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 没有必要具有静态存储持续时间。
【讨论】: