47 votes

Comment retourner un tableau à partir d'une fonction ?

Comment puis-je retourner un tableau à partir d'une méthode et comment dois-je le déclarer ?

 int[] test(void); // ??

2voto

Mark Points 2091

Eh bien, si vous souhaitez renvoyer votre tableau à partir d'une fonction, vous devez vous assurer que les valeurs ne sont pas stockées sur la pile car elles disparaîtront lorsque vous quitterez la fonction.

Donc, soit rendez votre tableau statique, soit allouez la mémoire (ou transmettez-la mais votre première tentative est avec un paramètre void). Pour ta méthode, je la définirais comme ceci :

 int *gnabber(){
  static int foo[] = {1,2,3}
  return foo;
}

-1voto

ksdarkonix Points 1

"comment puis-je retourner un tableau dans une méthode c++ et comment dois-je le déclarer ? int[] test(void); ??"

 template <class X>
  class Array
{
  X     *m_data;
  int    m_size;
public:
    // there constructor, destructor, some methods
    int Get(X* &_null_pointer)
    {
        if(!_null_pointer)
        {
            _null_pointer = new X [m_size];
            memcpy(_null_pointer, m_data, m_size * sizeof(X));
            return m_size;
        }
       return 0;
    }
}; 

juste pour int

 class IntArray
{
  int   *m_data;
  int    m_size;
public:
    // there constructor, destructor, some methods
    int Get(int* &_null_pointer)
    {
        if(!_null_pointer)
        {
            _null_pointer = new int [m_size];
            memcpy(_null_pointer, m_data, m_size * sizeof(int));
            return m_size;
        }
       return 0;
    }
}; 

Exemple

 Array<float> array;
float  *n_data = NULL;
int     data_size;
if(data_size = array.Get(n_data))
{     // work with array    }

delete [] n_data;

exemple pour int

 IntArray   array;
int       *n_data = NULL;
int        data_size;
if(data_size = array.Get(n_data))
{  // work with array  }

delete [] n_data;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X