Wenn ich raten müsste, würde ich sagen, dass Sie einen Java-Hintergrund haben. Dies ist C ++, und die Dinge werden als Wert übergeben, sofern Sie mit dem &
Operator -operator nichts anderes angeben (beachten Sie, dass dieser Operator auch als Operator "Adresse von" verwendet wird, jedoch in einem anderen Kontext). Dies ist alles gut dokumentiert, aber ich werde es trotzdem wiederholen:
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
Sie können auch einen Zeiger auf einen Vektor übergeben (void foo(vector<int> *bar)
) übergeben. Wenn Sie jedoch nicht wissen, was Sie tun, und das Gefühl haben, dass dies wirklich der richtige Weg ist, tun Sie dies nicht.
Vektoren sind es auch nicht dasselbe wie Arrays! Intern verfolgt der Vektor ein Array, von dem er die Speicherverwaltung für Sie übernimmt, aber auch viele andere STL-Container. Sie können einen Vektor nicht an eine Funktion übergeben, die einen Zeiger oder ein Array erwartet, oder umgekehrt (Sie können jedoch auf das zugrunde liegende Array zugreifen (auf dieses zeigen) und dies verwenden). Vektoren sind Klassen, die durch ihre Elementfunktionen viel Funktionalität bieten, während Zeiger und Arrays integrierte Typen sind. Außerdem werden Vektoren dynamisch zugewiesen (was bedeutet, dass die Größe zur Laufzeit bestimmt und geändert werden kann), während die Arrays im C-Stil statisch zugewiesen werden (ihre Größe ist konstant und muss zur Kompilierungszeit bekannt sein), was ihre Verwendung einschränkt.
Ich schlage vor, Sie lesen etwas mehr über C ++ im Allgemeinen (insbesondere Array-Zerfall ) und schauen sich dann das folgende Programm an, das den Unterschied zwischen Arrays und Zeigern veranschaulicht:
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);
}