Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Argumen dalam panggilan fungsi memiliki bentuk sebagai berikut:
ekspresi(optdaftarekspresi ) /* Panggilan fungsi */
Dalam panggilan fungsi, expression-list adalah daftar ekspresi (dipisahkan dengan koma). Nilai dari ekspresi yang disebutkan belakangan ini adalah argumen yang diteruskan ke fungsi. Jika fungsi tidak mengambil argumen, expression-list harus berisi kata kunci void.
Argumen dapat berupa nilai apa pun dengan tipe dasar, struktur, gabungan, atau pointer. Semua argumen diteruskan oleh nilai. Hal ini berarti salinan argumen ditetapkan ke parameter yang sesuai. Fungsi tidak mengetahui lokasi memori aktual dari argumen yang diteruskan. Fungsi tersebut menggunakan salinan ini tanpa memengaruhi variabel dari mana awalnya berasal.
Meskipun Anda tidak dapat meneruskan array atau fungsi sebagai argumen, Anda dapat meneruskan pointer ke item ini. Pointer menyediakan cara bagi sebuah fungsi untuk mengakses nilai menurut referensi. Karena pointer ke variabel menyimpan alamat variabel, fungsi dapat menggunakan alamat ini untuk mengakses nilai variabel. Argumen pointer memungkinkan sebuah fungsi untuk mengakses array dan fungsi, meskipun array dan fungsi tidak dapat diteruskan sebagai argumen.
Urutan evaluasi argumen dapat bervariasi di bawah pengompilasi yang berbeda dan tingkat pengoptimalan yang berbeda. Namun, argumen dan efek samping apa pun sepenuhnya dievaluasi sebelum fungsi dimasukkan. Lihat Efek Samping untuk informasi tentang efek samping.
expression-list dalam panggilan fungsi dievaluasi dan konversi aritmatika yang biasa dilakukan pada setiap argumen dalam panggilan fungsi. Jika prototipe tersedia, jenis argumen yang dihasilkan dibandingkan dengan parameter terkait prototipe. Jika tidak cocok, konversi akan dilakukan, atau pesan diagnostik dikeluarkan. Parameter juga menjalani konversi aritmatika yang biasa.
Jumlah ekspresi dalam expression-list harus cocok dengan jumlah parameter, kecuali jika prototipe atau definisi fungsi secara eksplisit menentukan jumlah variabel argumen. Dalam hal ini, pengompilasi memeriksa argumen sebanyak jenis nama yang ada dalam daftar parameter, lalu mengonversinya, jika perlu, seperti yang dijelaskan di atas. Lihat Panggilan dengan Jumlah Variabel Argumen untuk informasi selengkapnya.
Jika daftar parameter prototipe hanya berisi kata kunci void, pengompilasi mengharapkan argumen nol dalam panggilan fungsi dan parameter nol dalam definisi. Pesan diagnostik akan dikeluarkan jika menemukan argumen apa pun.
Contoh
Contoh ini menggunakan pointer sebagai argumen:
int main()
{
/* Function prototype */
void swap( int *num1, int *num2 );
int x, y;
.
.
.
swap( &x, &y ); /* Function call */
}
/* Function definition */
void swap( int *num1, int *num2 )
{
int t;
t = *num1;
*num1 = *num2;
*num2 = t;
}
Dalam contoh ini, fungsi swap dinyatakan dalam main untuk memiliki dua argumen, masing-masing diwakili oleh pengidentifikasi num1 dan num2, yang keduanya merupakan penunjuk ke nilai int. Parameter num1 dan num2 dalam definisi gaya prototipe juga dinyatakan sebagai pointer untuk nilai tipe int.
Dalam panggilan fungsi
swap( &x, &y )
alamat x disimpan dalam num1 dan alamat y disimpan dalam num2. Sekarang dua nama, atau "alias," sudah ada untuk lokasi yang sama. Referensi ke *num1 dan *num2 di swap secara efektif mereferensikan ke x dan y di main. Penugasan dalam swap sebenarnya menukar isi x dan y. Oleh karena itu, tidak ada pernyataan return yang diperlukan.
Pengompilasi melakukan pemeriksaan jenis pada argumen ke swap karena prototipe swap menyertakan jenis argumen untuk setiap parameter. Pengidentifikasi dalam tanda kurung prototipe dan definisi dapat sama atau berbeda. Yang penting adalah bahwa jenis argumen cocok dengan jenis daftar parameter dalam prototipe dan definisi.