Question

sont des tableaux transmis par défaut par ref ou de la valeur? Merci.

Était-ce utile?

La solution

Ils sont passés comme des pointeurs. Cela signifie que toutes les informations sur la taille du tableau est perdu. Vous seriez bien mieux conseillé d'utiliser std :: vecteurs, qui peuvent être passés par valeur ou par référence, que vous choisissez, et qui conservent donc toutes leurs informations.

Voici un exemple de passage d'un tableau à une fonction. Notez que nous devons préciser le nombre d'éléments spécifiquement, comme sizeof (p) donnerait la taille du pointeur.

int add( int * p, int n ) {
   int total = 0;
   for ( int i = 0; i < n; i++ ) {
       total += p[i];
   }
   return total;
}


int main() {
    int a[] = { 1, 7, 42 };
    int n = add( a, 3 );
}

Autres conseils

Tout d'abord, vous ne pouvez pas passer un tableau en valeur dans le sens où on fait une copie du tableau. Si vous avez besoin de cette fonctionnalité, utilisez std::vector ou boost::array.

Normalement, un pointeur vers le premier élément est passé par valeur. La taille du tableau est perdu dans ce processus et doit être transmis séparément. Les signatures suivantes sont équivalentes:

void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size);   // the 7 is ignored in this context!

Si vous voulez passer par référence, la taille fait partie du type:

void by_reference(int (&a)[7]);   // only arrays of size 7 can be passed here!

Souvent, vous combinez passe par référence avec des modèles, vous pouvez utiliser la fonction de différentes tailles connues statiquement:

template<size_t size>
void by_reference(int (&a)[size]);

Hope this helps.

Les tableaux sont spéciaux: ils sont toujours passés comme un pointeur vers le premier élément du tableau

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top