Tahmin etmem gerekirse, Java kökenli olduğunuzu söyleyebilirim. Bu C ++ 'dır ve siz &
-operatörü kullanarak başka türlü belirtmediğiniz sürece işler değere göre iletilir (bu işlecin aynı zamanda' adresi 'operatörü olarak kullanıldığını, ancak farklı bir bağlamda kullanıldığını unutmayın). Bunların hepsi iyi belgelenmiştir, ancak yine de tekrarlayacağım:
void foo(vector<int> bar);
void foo(vector<int> &bar);
void foo(vector<int> const &bar);
Ayrıca bir vektöre ( void foo(vector<int> *bar)
) bir işaretçi aktarmayı da seçebilirsiniz , ancak ne yaptığınızı bilmiyorsanız ve bunun gerçekten doğru yol olduğunu hissetmiyorsanız, bunu yapmayın.
Ayrıca vektörler dizilerle aynı değildir ! Vektör, dahili olarak sizin için bellek yönetimini işlediği bir diziyi izler, ancak diğer birçok STL kapsayıcısı da öyle. Bir işaretçi veya dizi bekleyen bir işleve bir vektör iletemezsiniz veya bunun tersi de geçerlidir (temeldeki diziye (işaretçi) erişebilir ve bunu kullanabilirsiniz). Vektörler, üye işlevleri aracılığıyla çok sayıda işlevsellik sunan sınıflardır, işaretçiler ve diziler ise yerleşik türlerdir. Aynı zamanda, vektörler dinamik olarak tahsis edilir (bu, boyutun çalışma zamanında belirlenebileceği ve değiştirilebileceği anlamına gelir), C tarzı diziler statik olarak tahsis edilir (boyutu sabittir ve derleme zamanında bilinmelidir), kullanımlarını sınırlandırır.
Genel olarak C ++ (özellikle dizi bozulması ) hakkında biraz daha okumanızı ve ardından diziler ve işaretçiler arasındaki farkı gösteren aşağıdaki programa bir göz atmanızı öneririm :
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);
}