Array adalah salah satu bentuk penyimpanan data terstruktur yang paling banyak digunakan dalam program komputer. Pemrosesan mereka dapat dilakukan dengan berbagai algoritma yang diimplementasikan dalam metode dan fungsi kelas. Oleh karena itu, seringkali diperlukan untuk meneruskan array ke suatu fungsi. Bahasa C dan C ++ menawarkan kebebasan besar dalam memilih metode untuk melakukan tindakan ini.
Itu perlu
compiler bahasa C dan C++
instruksi
Langkah 1
Lewati array ukuran tetap ke fungsi. Ubah prototipe fungsi untuk memuat argumen dengan tipe yang sesuai. Misalnya, deklarasi fungsi yang mengambil array nilai numerik bilangan bulat dari tiga elemen sebagai parameter mungkin terlihat seperti ini:
void ArrayFunction (int aNumbers [3]);
Fungsi seperti itu dipanggil dengan meneruskan array langsung ke sana sebagai argumen:
void BeberapaFungsi ()
{
int aNumber = {1, 2, 3};
ArrayFunction (aNumbers);
}
Data yang ditransfer disalin ke tumpukan. Memodifikasi array dalam fungsi yang dipanggil tidak mengubah sumber.
Langkah 2
Lewati array panjang variabel ke fungsi. Untuk melakukan ini, jangan tentukan dimensi argumen yang sesuai:
void ArrayFunction (int aNumbers );
Array multidimensi juga dapat diteruskan dengan cara yang sama (hanya "dimensi" pertama yang dapat berupa variabel):
void ArrayFunction (int aNumbers [3] [2]);
Fungsi-fungsi ini dipanggil dengan cara yang sama seperti pada langkah pertama.
Agar dapat memproses array dengan panjang variabel dalam suatu fungsi dengan benar, Anda harus secara eksplisit meneruskan jumlah elemennya melalui parameter tambahan, atau menggunakan konvensi yang memberlakukan batasan pada nilai elemen itu sendiri (nilai tertentu harus menjadi tanda akhir dari array).
Langkah 3
Lewati array dengan pointer. Argumen fungsi harus berupa penunjuk ke nilai dengan tipe yang sesuai dengan elemen array. Sebagai contoh:
void ArrayFunction (int * pNumbers);
Akses ke data dalam suatu fungsi dapat dilakukan baik dalam notasi untuk bekerja dengan elemen array, dan menggunakan aritmatika alamat:
void ArrayFunction (int * pNumbers)
{
pAngka [0] = 10; // akses ke elemen 0
* (pAngka + 1) = 20; // akses ke item 1
}
Hati-Hati! Karena fungsi dilewatkan bukan salinan data, tetapi pointer ke sana, array asli akan dimodifikasi.
Keuntungan dari metode ini adalah kecepatan, ekonomi sumber daya komputasi dan fleksibilitas tertentu. Jadi, Anda dapat memanggil fungsi target dengan meneruskannya sebagai pointer ke elemen array yang berubah-ubah:
void BeberapaFungsi ()
{
int aNumber = {1, 2, 3};
ArrayFunction (aNumbers); // seluruh array
ArrayFunction (& aNumbers [1]); // mulai dari elemen kedua
}
Metode ini juga biasanya melibatkan melewatkan jumlah elemen yang tersedia dalam parameter tambahan atau menggunakan terminator array.
Langkah 4
Melewati data ke fungsi dengan parameter yang merupakan objek atau referensi ke objek kelas yang mengimplementasikan fungsionalitas array. Kelas atau templat kelas seperti itu biasanya ditemukan di perpustakaan dan kerangka kerja populer (QVector di Qt, CArray di MFC, std:: vector di STL, dll.).
Seringkali kelas-kelas ini menerapkan strategi berbagi data implisit dengan penghitungan referensi, melakukan salinan dalam hanya ketika data dimodifikasi (salin saat menulis). Ini memungkinkan Anda untuk meminimalkan konsumsi sumber daya komputasi bahkan dalam hal melewatkan objek array berdasarkan nilai melalui argumen fungsi dan metode:
void ArrayFunction (QVector oArray)
{
int nItemCount = oArray.count();
int nItem = oArray [0];
}
void BeberapaFungsi ()
{
QVector oArray (10);
untuk (int i = 0; i