Susunan adalah salah satu bentuk penyimpanan data berstruktur yang paling banyak digunakan dalam program komputer. Pemprosesan mereka dapat dilakukan dengan pelbagai algoritma yang dilaksanakan dalam kaedah dan fungsi kelas. Oleh itu, seringkali diperlukan untuk meneruskan array ke fungsi. Bahasa C dan C ++ menawarkan kebebasan besar dalam memilih kaedah melakukan tindakan ini.
Ia perlu
penyusun bahasa C dan C ++
Arahan
Langkah 1
Hantarkan susunan ukuran tetap ke fungsi. Tukar prototaip fungsi untuk mengandungi argumen jenis yang sesuai. Sebagai contoh, pengisytiharan fungsi yang mengambil susunan nilai numerik integer dari tiga elemen sebagai parameter mungkin kelihatan seperti ini:
batal ArrayFunction (int aNumbers [3]);
Fungsi seperti itu dipanggil dengan meneruskan array langsung kepadanya sebagai argumen:
batal SomeFunction ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers);
}
Data yang dipindahkan disalin ke timbunan. Mengubah susunan dalam fungsi yang disebut tidak mengubah sumbernya.
Langkah 2
Hantar susunan panjang berubah ke fungsi. Untuk melakukan ini, jangan tentukan dimensi argumen yang sesuai:
batal ArrayFunction (int aNumbers );
Susunan multidimensi juga dapat dilalui dengan cara yang serupa (hanya "dimensi" pertama yang boleh menjadi pemboleh ubah):
batal ArrayFunction (int aNumbers [3] [2]);
Fungsi-fungsi ini dipanggil dengan cara yang sama seperti pada langkah pertama.
Untuk dapat memproses susunan dengan panjang pemboleh ubah dalam fungsi dengan betul, anda mesti memasukkan bilangan elemen mereka secara eksplisit melalui parameter tambahan, atau menggunakan konvensi yang mengenakan sekatan pada nilai elemen itu sendiri (nilai tertentu mestilah tanda akhir array).
Langkah 3
Lulus susunan dengan penunjuk. Argumen fungsi mestilah penunjuk pada nilai dengan jenis yang sesuai dengan unsur-unsur array. Sebagai contoh:
batal ArrayFunction (int * pNumbers);
Akses ke data dalam fungsi dapat dilakukan baik dalam notasi untuk bekerja dengan elemen array, dan menggunakan aritmetik alamat:
kekosongan ArrayFunction (int * pNumbers)
{
Nombor p [0] = 10; // akses ke elemen 0
* (nombor Nombor + 1) = 20; // akses ke item 1
}
Berhati-hati! Oleh kerana fungsi tersebut tidak disalurkan salinan data, tetapi penunjuk padanya, susunan asalnya akan diubah.
Kelebihan kaedah ini adalah kepantasan, ekonomi sumber pengiraan dan fleksibiliti tertentu. Oleh itu, anda boleh memanggil fungsi sasaran dengan memberikannya penunjuk ke elemen larik sewenang-wenangnya:
batal SomeFunction ()
{
int aNumbers = {1, 2, 3};
ArrayFunction (aNumbers); // keseluruhan susunan
ArrayFunction (& aNumbers [1]); // bermula dari elemen kedua
}
Kaedah ini juga biasanya melibatkan penyebaran jumlah elemen yang tersedia dalam parameter tambahan atau menggunakan array terminator.
Langkah 4
Menyerahkan data ke fungsi dengan parameter yang merupakan objek atau rujukan ke objek kelas yang menerapkan fungsi array. Kelas atau templat kelas seperti itu biasanya terdapat di perpustakaan dan kerangka kerja yang popular (QVector in Qt, CArray in MFC, std:: vector in STL, etc.).
Selalunya kelas ini menerapkan strategi perkongsian data yang tersirat dengan penghitungan rujukan, melakukan salinan mendalam hanya ketika data diubah (copy on write). Ini membolehkan anda meminimumkan penggunaan sumber komputasi walaupun dalam kes melewati objek array dengan nilai melalui argumen fungsi dan kaedah:
void ArrayFungsi (QVector oArray)
{
int nItemCount = oArray.count ();
int nItem = oArray [0];
}
batal SomeFunction ()
{
QVector oArray (10);
untuk (int i = 0; i