Возвращаем массив в функцию - PullRequest
178 голосов
/ 13 августа 2010

У меня есть массив int arr[5], который передается в функцию fillarr(int arr[]):

int fillarr(int arr[])
{
    for(...);
    return arr;
}
  1. Как я могу вернуть этот массив?
  2. Как я буду его использовать, скажем, я вернул указатель, как мне получить к нему доступ?

Ответы [ 15 ]

0 голосов
/ 12 сентября 2018

На самом деле, когда вы передаете массив внутри функции, указатель на исходный массив передается в параметре функции и, таким образом, изменения, сделанные в массиве внутри этой функции, фактически вносятся в исходный массив.

#include <iostream>

using namespace std;

int* func(int ar[])
{
    for(int i=0;i<100;i++) 
        ar[i]=i;
    int *ptr=ar;
    return ptr;
}


int main() {
    int *p;
    int y[100]={0};    
    p=func(y);

    for(int i=0;i<100;i++) 
        cout<<i<<" : "<<y[i]<<'\n';
}

Запустите его, и вы увидите изменения

0 голосов
/ 24 июня 2018

а как же:

int (*func())
{
    int *f = new int[10] {1,2,3};

    return f;
}

int fa[10] = { 0 };
auto func2() -> int (*) [10]
{
    return &fa;
}
0 голосов
/ 17 февраля 2017

Просто определите тип [] как возвращаемое значение, например:

        private string[] functionReturnValueArray(string one, string two)
    {

        string[] x = {one, two};


        x[0] = "a";
        x[1] = "b";

        return x;
    }

. , , вызов функции:

string[] y;
y = functionReturnValueArray(stringOne, stringTwo)
0 голосов
/ 11 октября 2016

Источник: https://www.tutorialspoint.com/cplusplus/cpp_return_arrays_from_functions.htm

C ++ не позволяет возвращать весь массив в качестве аргумента функции.Однако вы можете вернуть указатель на массив, указав имя массива без индекса.

  1. Если вы хотите вернуть из функции одномерный массив, вам придется объявить функцию, возвращающуюуказатель, как в следующем примере:
int * myFunction()    {
   .
   .
   .
}
C ++ не рекомендует возвращать адрес локальной переменной за пределы функции, поэтому вам необходимо определить локальную переменную как статическую переменную.

Применение этих правил к текущему вопросу,мы можем написать программу следующим образом:

# include <iostream>

using namespace std;

int * fillarr( );


int main ()
{

   int *p;

   p = fillarr();

   for ( int i = 0; i < 5; i++ )
       cout << "p[" << i << "] : "<< *(p + i) << endl;

    return 0;
}


int * fillarr( )
{
    static int  arr[5];

    for (int i = 0; i < 5; ++i)
        arr[i] = i;

    return arr;
 }

Вывод будет:

p[0]=0
p[1]=1
p[2]=2
p[3]=3
p[4]=4
0 голосов
/ 23 июля 2015
template<typename T, size_t N>
using ARR_REF = T (&)[N];

template <typename T, size_t N>
ARR_REF<T,N> ArraySizeHelper(ARR_REF<T,N> arr);

#define arraysize(arr) sizeof(ArraySizeHelper(arr))
...