Comment passe-t-on les tableaux?

Les tableaux sont-ils passés par défaut par référence ou par valeur? Merci.

Ils sont passés comme des pointeurs. Cela signifie que toutes les informations sur la taille du tableau sont perdues. Vous feriez bien mieux d’utiliser std :: vectors, qui peut être passé par valeur ou par référence, à votre choix, et qui conservent donc toutes leurs informations.

Voici un exemple de passage d’un tableau à une fonction. Notez que nous devons spécifier le nombre d’éléments de manière spécifique, puisque 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 ); } 

Premièrement, vous ne pouvez pas passer un tableau par valeur dans le sens où une copie du tableau est faite. Si vous avez besoin de cette fonctionnalité, utilisez std::vector ou boost::array .

Normalement, un pointeur sur le premier élément est passé par valeur. La taille du tableau est perdue dans ce processus et doit être transmise séparément. Les signatures suivantes sont toutes é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 afin de pouvoir utiliser la fonction avec différentes tailles connues de manière statique:

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

J’espère que cela t’aides.

Les tableaux sont spéciaux: ils sont toujours transmis en tant que pointeur au premier élément du tableau.