Si je devais deviner, je dirais que vous êtes d'origine Java. Il s'agit de C ++, et les choses sont passées par valeur sauf si vous spécifiez le contraire en utilisant &
-operator (notez que cet opérateur est également utilisé comme opérateur 'address-of', mais dans un contexte différent). Tout cela est bien documenté, mais je vais quand même réitérer:
void foo(vector<int> bar); // by value
void foo(vector<int> &bar); // by reference (non-const, so modifiable inside foo)
void foo(vector<int> const &bar); // by const-reference
Vous pouvez également choisir de passer un pointeur sur un vecteur (void foo(vector<int> *bar)
), mais à moins que vous ne sachiez ce que vous faites et que vous estimiez que c'est vraiment la voie à suivre, ne le faites pas.
De plus, les vecteurs ne sont pas les mêmes que les tableaux! En interne, le vecteur garde la trace d'un tableau dont il gère la gestion de la mémoire pour vous, mais il en va de même pour de nombreux autres conteneurs STL. Vous ne pouvez pas passer un vecteur à une fonction qui attend un pointeur ou un tableau ou vice versa (vous pouvez accéder au (pointeur vers) le tableau sous-jacent et l'utiliser cependant). Les vecteurs sont des classes offrant beaucoup de fonctionnalités via ses fonctions membres, tandis que les pointeurs et les tableaux sont des types intégrés. De plus, les vecteurs sont alloués dynamiquement (ce qui signifie que la taille peut être déterminée et modifiée à l'exécution) tandis que les tableaux de style C sont alloués statiquement (sa taille est constante et doit être connue au moment de la compilation), ce qui limite leur utilisation.
Je vous suggère de lire un peu plus sur C ++ en général (en particulier la désintégration des tableaux ), puis de jeter un œil au programme suivant qui illustre la différence entre les tableaux et les pointeurs:
void foo1(int *arr) { cout << sizeof(arr) << '\n'; }
void foo2(int arr[]) { cout << sizeof(arr) << '\n'; }
void foo3(int arr[10]) { cout << sizeof(arr) << '\n'; }
void foo4(int (&arr)[10]) { cout << sizeof(arr) << '\n'; }
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
foo1(arr);
foo2(arr);
foo3(arr);
foo4(arr);
}