2012-01-07 1 views
0

Dois-je mettre "&" lorsque je passe un tableau 2D à une fonction ou que les tableaux 2D le font automatiquement par référence à 1Ds.passer tableau multidimensionnel C++

void fnc (int& arr[5][5]) { 
} 
+3

Les tableaux 1D ne sont pas automatiquement passés par référence ... –

+1

'int & arr [5] [5]' -> 'arr' est un tableau de deux dim de type int ref, voulez-vous cela? –

+0

Je veux dire cela mais de façon intéressante dans mon code je passe par valeur mais après que la fonction se termine les valeurs d'arr deviennent changées. – Shibli

Répondre

2

Il sera passé par valeur si vous ne spécifiez pas passer par référence &.

Cependant, les tableaux se désintègrent en pointeurs, donc vous passez essentiellement un pointeur par valeur, ce qui signifie que la mémoire vers laquelle il pointe sera la même.

En termes courants, la modification de arr à l'intérieur de la fonction modifie l'original arr (une copie n'est pas créée).

De plus, les tableaux 1D ne sont pas non plus transmis "automatiquement" par référence, ils apparaissent juste comme ils se désintègrent en pointeurs.

+0

Donc dois-je mettre "&" pour un tableau 2D si je veux modifier le tableau passé? – Shibli

+0

@Shibli Non, vous ne devriez pas. relisez la réponse. – yoni

+0

@Shibli ce n'est pas du tout ce que j'ai dit. Une réponse simple est que vous pouvez le passer sans la référence et il sera encore modifié à l'extérieur. Mais essayez de comprendre la réponse car elle sera beaucoup plus utile à long terme. –

2

Si vous voulez vraiment passer le tableau par référence, il devrait être:

void fnc(int (&arr)[5][5]); 

Sans les parenthèses intérieures, comme le dit M. Anubis, vous tenterez de passer un tableau de références qui est peu probable être utile.

Normalement, on pourrait simplement écrire

void fnc(int arr[][5]); 

(Vous pouvez écrire arr[5][5], mais le premier 5 est ignoré qui peut causer de la confusion.)

Ceci passe l'adresse du tableau, plutôt que le tableau lui-même, ce que je pense est ce que vous essayez d'atteindre.

Vous devriez également considérer un vecteur de vecteurs ou d'autres structures de données de plus haut niveau; les tableaux bruts ont de nombreux pièges pour les imprudents.

Questions connexes