Bagaimana cara melewatkan array yang dialokasikan secara statis dengan referensi berfungsi?
void foo(int (&myArray)[100])
{
}
int main()
{
int a[100];
foo(a);
}
Apakah (&myArray)[100]
memiliki arti atau hanya sintaksinya untuk melewatkan array apa pun dengan referensi? Saya tidak mengerti tanda kurung terpisah diikuti oleh tanda kurung besar di sini. Terima kasih.
Jawaban:
Ini adalah sintaks untuk referensi array - Anda perlu menggunakan
(&array)
untuk mengklarifikasi kepada kompiler bahwa Anda ingin referensi ke array, daripada array referensi (tidak valid)int & array[100];
.EDIT: Beberapa klarifikasi.
Ketiga cara ini berbeda untuk mendeklarasikan fungsi yang sama. Mereka semua diperlakukan sebagai mengambil
int *
parameter, Anda bisa mengirimkan ukuran array apa pun kepada mereka.Ini hanya menerima array 100 bilangan bulat. Anda dapat dengan aman menggunakan
sizeof
padax
Ini diuraikan sebagai "array referensi" - yang tidak sah.
sumber
int a, b, c; int arr[3] = {a, b, c};
?void foo(int & x[100]);
diuraikan sebagai "array referensi"? Apakah karena aturan "dari-kanan-ke-kiri"? Jika ya, tampaknya tidak konsisten dengan caravoid foo(int (&x)[100]);
diuraikan sebagai "referensi ke array". Terima kasih sebelumnya.Hanya sintaks yang diperlukan:
^ Lewati array 100
int
dengan referensi nama parameternyamyArray
;^ Pass array. Array meluruh menjadi sebuah pointer. Dengan demikian Anda kehilangan informasi ukuran.
^ Lewati penunjuk fungsi. Fungsi mengembalikan suatu
int
dan mengambil adouble
. Nama parameternya adalahmyFunc
.sumber
Itu adalah sintaksis. Dalam argumen fungsi
int (&myArray)[100]
kurung yang melampirkan&myArray
diperlukan. jika Anda tidak menggunakannya, Anda akan melewatiarray of references
dan itu karenasubscript operator []
memiliki prioritas lebih tinggi daripada& operator
.Misalnya
int &myArray[100] // array of references
Jadi, dengan menggunakan
type construction ()
Anda memberi tahu kompiler bahwa Anda ingin referensi ke array 100 integer.Misalnya
int (&myArray)[100] // reference of an array of 100 ints
sumber
array of references
" - yang tentu saja, tidak ada, sehingga Anda akan mendapatkan kesalahan kompilasi. Ini lucu bagi saya bahwa aturan diutamakan operator bersikeras ini harus terjadi secara default.Array adalah standar yang dilewati oleh pointer. Anda dapat mencoba memodifikasi array di dalam pemanggilan fungsi untuk pemahaman yang lebih baik.
sumber
char arr[1]; foo(char arr[]).
, arr menurunkan ke sebuah pointer; saat menggunakanchar arr[1]; foo(char (&arr)[1])
, arr dilewatkan sebagai referensi. Perlu dicatat bahwa bentuk sebelumnya sering dianggap sebagai bentuk yang buruk karena dimensi hilang.foo(T* t)
, dan Anda memiliki sebuah arrayT a[N];
maka ketika Anda menulisfoo(a);
saya pikir akan lebih tepat untuk mengatakan bahwa Anda melewati sebuah pointer, tidak melewati sebuah array, dan Anda melewati pointer dengan nilai.Berikut ini menciptakan fungsi generik, mengambil array dari berbagai ukuran dan jenis apa pun dengan referensi:
bermain dengan kodenya.
sumber