我需要在数组中读取我的函数,提取数据,然后从函数中返回一个数组。
数组只能保存2个值。
这就是我想要的概念:
int myfunction(int my_array[1])
{
int f_array[1];
f_array[0] = my_array[0];
f_array[1] = my_array[1];
// modify f_array some more
return f_array;
}
我已经阅读了有关指针等的内容,但我们已经非常困惑,并希望了解如何最好地解决这个问题的一个非常基本的例子!
谢谢!
答案 0 :(得分:9)
你不能在c ++中返回n个内置数组。
如果你是c ++的新手并且对指针感到困惑,你真的不想使用数组(至少不是内置数组)。请改为使用std::vector<int>
,或者如果您只有一定数量的元素并希望表达(并且确实需要更好的性能),请使用boost::array<int, N>
。(或者甚至std::array<int, N>
,如果您C++11
中的程序(如果你不知道你是否在C++11
机会中编程,那么你是不是)。
例如:
std::vector<int> myfunction(const std::vector<int>& my_array) {
std::vector<int> f_array;
for(int i = 0; i < my_array.size(); ++i)
f_array.push_back(my_array[i]);
return f_array;
}
boost::array<int, 2> myfunction(const boost::array<int, 2>& my_array) {
boost::array<int, 2> f_array;
f_array[0] = my_array[0];
f_array[1] = my_array[1];
return f_array;
}
然后,您可以使复制代码更简单(查找您决定使用的任何类的构造函数和成员函数,以及STL算法)。例如:
std::vector<int> myfunction(const std::vector<int>& my_array) {
std::vector<int> f_array(m_array);
...
return f_array;
}
另外一点,您的代码中有一个错误:您将my_array
定义为int my_array[1]
,这意味着它是一个包含一个元素的数组,但您可以访问两个元素(my_array[0]
和{{ 1}}),对my_array[1]
的访问超出范围(my_array[1]
有int foo[N]
个项目,从索引N
开始,然后转到索引0
)。我假设你真的是N-1
。
答案 1 :(得分:4)
std::array<int,2> myfunction(int * my_array)
{
std::array<int,2> f_array;
f_array[0] = my_array[0];
f_array[1] = my_array[1];
// modify f_array some more
return f_array;
}
请注意,作为参数,int my_array[1]
与int my_array[1000]
,int my_array[]
或int * my_array
完全相同。它只是一个指针,大小值毫无意义。这不适用于常规数组声明,只适用于参数。
为了确保您只传递大小为2的数组,您可以通过引用获取数组:
std::array<int,2> myfunction(int (&my_array)[2])
答案 2 :(得分:1)
如果您只需要两个值,我会看一下std::pair,毕竟,这就是它的用途。它还具有正确的副本(在c ++ 11中移动)语义,以使其正常工作。
答案 3 :(得分:1)
如果您在阵列中严格使用2个元素,我建议std::pair
typedef std::pair<int,int> int_pair;
int_pair myfunction(int_pair ip)
{
ip.first *= 0.12;
ip.second -= 355;
return ip;
}
答案 4 :(得分:0)
您无法使用C或C ++返回数组。
当您使用C ++时,请使用容器类而不是原始数组。 std::vector
或boost::array
将是不错的选择。
答案 5 :(得分:0)
您无法从函数返回数组,但可以为“out”数组添加第二个参数:
void foo(int array_in[], int array_out[], int array_size)
{
for (int i = 0; i < array_size; i++)
array_out[i] = array_in[i];
}
答案 6 :(得分:-1)
具有两个值的数组应声明为int my_array[2]
。无论如何,您无法按值复制数组。你说你在对象中只有两个整数。所以我建议你改用pair<int,int>
。
using namespace std;
pair<int,int> myfunction(pair<int,int> my_array)
{
pair<int,int> f_array;
f_array.first = my_array.first;
f_array.second = my_array.second;
// modify f_array some more
return f_array;
}
答案 7 :(得分:-1)
C ++不允许将整个数组作为参数返回给函数。但是,您可以通过指定不带索引的数组名称来返回指向数组的指针。
要从函数返回单维数组,您必须声明一个返回指针的函数,如下所示:
int * myfunc(){
static int arr[size_of_array];
/*
code for manipulation of arr
*/
return arr;
}
一旦我们离开功能块,函数体内声明的变量就会被销毁。因此,我们需要将int arr[size_of_arr]
声明为static
。这将在堆上为int arr[size_of_arr]
分配内存,并确保在我们离开功能块时它不会被销毁。
调用myfunc()
的方法如下所述:
int *myarray;
myarray=myfunc();
现在myfunc()
返回的数组存储在myarray