Pointer Ke Fungsi Bahasa C Beserta Penjelasannya
Contoh: Perhatikan contoh sederhana dari deklarasi dan fungsi yang menggunakan pointer.
#include <stdio.h>
// Sebuah fungsi normal dengan
// parameter integer dan tipe
// return void.
void fun(int a)
{printf("Value of a is %d\n", a);}
int main()
{
// fun_ptr merupakan sebuah
// pointer ke fungsi fun().
void (*fun_ptr)(int) = &fun;
/* Baris sebelumnya adalah
bernilai sama dengan dua
variabel fungsi void
(*fun_ptr)(int); dan fun_ptr
= &fun;*/
// Memanggil fun() menggunakan
// fun_ptr.
(*fun_ptr)(10);
return 0;
}
Output:Value of a is 10
Dibutuhkan tanda kurung ekstra pada sekitar fungsi pointer seperti pada fun_ptr, bertujuan untuk mencegah agar ekspresi "void (*fun_ptr)(int)" tidak menjadi "void *fun_ptr(int)" yang merupakan bentuk lain dari deklarasi, yang akan mengembalikan nilai void pointer.
- Sebuah pointer ke fungsi tidak menunjuk ke data melainkan ke kode program, biasanya adalah sebuah fungsi pointer akan menyimpan kode eksekusi awal dari suatu fungsi.
- Tidak perlu melakukan alokasi realokasi memori dengan menggunakan pointer ke fungsi.
- Nama dari fungsi juga dapat digunakan untuk mendapatkan nilai alamat dari suatu fungsi.
- Pointer ke fungsi dapat memiliki nilai array dari pointer fungsi itu sendiri.
- Pointer ke fungsi dapat digunakan pada penempatan switch case.
- Pointer ke fungsi dapat dilewatkan sebagai nilai argumen dan dapat mengembalikan nilai return dari sebuah fungsi.
- Pointer ke fungsi merupakan bentuk pointer yang dapat digunakan untuk menghindari redudansi pada penulisan kode program.
- Memungkinkan untuk menggunakan pemrograman berorientasi objek pada C++ yang diimplementasikan dengan menggunakan pointer ke fungsi pada bahasa C.
Contoh: pada program berikut dilakukan penghapusan alamat operator '&' dalam suatu bentuk penugasan bahasa C. Tidak hanya itu, juga dilakukan perubahan pada fungsi pemanggil dengan menghapus operator '*', dimana hasil akhir dari proses kompilasi program adalah program tetap dapat dijalankan secara normal.
#include <stdio.h>
// Sebuah fungsi normal dengan
// parameter integer dan tipe
// return void.
void fun(int a)
{
printf("Value of a is %d\n", a);
}
int main()
{
// & dihapus
void (*fun_ptr)(int) = fun;
// * dihapus
fun_ptr(10);
return 0;
}
Output:Value of a is 10
Contoh:
#include <stdio.h>
void add(int a, int b)
{printf("Addition is %d\n", a+b);}
void subtract(int a, int b)
{printf("Subtraction is %d\n", a-b);}
void multiply(int a, int b)
{printf("Multiplication is %d\n", a*b);}
int main()
{
// fun_ptr_arr adalah array
// dari fungsi pointer.
void (*fun_ptr_arr[])(int, int) = {add, subtract, multiply};
unsigned int ch, a = 15, b = 10;
printf("Enter Choice: 0 for add, 1 for subtract and 2 "
"for multiply\n");
scanf("%d", &ch);
if (ch > 2) return 0;
(*fun_ptr_arr[ch])(a, b);
return 0;
}
Output:Enter Choice: 0 for add, 1 for subtract and 2 for multiply
2
Multiplication is 150
Contoh:
// Sebuah program sederhana
// bahasa C untuk
// memperlihatkan fungsi
// pointer sebagai sebuah
// parameter.
#include <stdio.h>
// Dua contoh fungsi sederhana
void fun1() { printf("Fun1\n"); }
void fun2() { printf("Fun2\n"); }
// Sebuah fungsi yang menerima
// sebuah fungsi sederhana
// sebagai nilai parameter dan
// dilakukan pemanggilan
// fungsi.
void wrapper(void (*fun)())
{fun();}
int main()
{
wrapper(fun1);
wrapper(fun2);
return 0;
}
// Contoh penggunaan qsort dan
// comparator pada bahasa C
#include <stdio.h>
#include <stdlib.h>
// Sebuah contoh penggunaan
// fungsi comparator yang
// digunakan untuk mengurutkan
// nilai array integer pada
// urutan ascending.
// Untuk mengurutkan nilai
// array apapun untuk tipe
// data apapun, dan atau
// kriteria apapun, maka
// dibutuhkan sebuah penulisan
// program yang berfungsi
// untuk membandingkan nilai
// dari fungsi tertentu, yang
// dapat disebut sebagai
// qsort().
int compare (const void * a, const void * b)
{return ( *(int*)a - *(int*)b );}
int main ()
{
int arr[] = {10, 5, 15, 12, 90, 80};
int n = sizeof(arr)/sizeof(arr[0]), i;
qsort (arr, n, sizeof(int), compare);
for (i=0; i<n; i++)
printf ("%d ", arr[i]);
return 0;
}
Output:5 10 12 15 80 90
Sama seperti qsort() yang telah dicontohkan sebelumnya, pada contoh kali ini dilakukan penulisan fungsi lainnya yang dapat digunakan untuk tipe data apapun dan penugasan apapun tanpa perlu menggunakan kode program yang redudansi. Berikut adalah contoh fungsi pencarian yang digunakan untuk tipe data jenis apapun, yang dapat pula digunakan untuk mencari elemen terdekat dengan menuliskan sebuah kostumisasi fungsi perbandingan.
Contoh:
#include <stdio.h>
#include <stdbool.h>
// Sebuah fungsi perbandingan
// yang digunakan untuk proses
// pencarian nilai array
// integer.
bool compare (const void * a, const void * b)
{return ( *(int*)a == *(int*)b );}
// Tujuan umum dari fungsi
// search() adalah untuk
// proses pencarian elemen *x
// dalam array arr[] dari
// arr_size.
// Catatan: void pointer juga
// digunakan pada program ini,
// sehingga fungsi dapat
// dipanggil oleh sebuah
// pointer dari tipe apapun.
//ele_size adalah ukuran dari
// elemen array.
int search(void *arr, int arr_size, int ele_size, void *x,
bool compare (const void * , const void *))
{
// Karena char mengambil nilai
// sebesar satu btyle, maka
// dapat digunakan char
// pointer untuk tipe data
// apapun.
// Untuk mendapatkan nilai
// aritmatika pointer yang
// benar, maka dibutuhkan
// proses perkalian indeks
// dengan nilai ukuran dari
// elemen array ele_size.
char *ptr = (char *)arr;
int i;
for (i=0; i<arr_size; i++)
if (compare(ptr + i*ele_size, x))
return i;
// Jika nilai elemen tidak
// ditemukan.
return -1;
}
int main()
{
int arr[] = {2, 5, 7, 90, 70};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 7;
printf ("Returned index is %d ", search(arr, n,
sizeof(int), &x, compare));
return 0;
}
Output:Returned index is 2
Catatan: Fungsi pencarian yang telah dibuat sebelumnya, dapat digunakan untuk tipe data jenis apapun yang ditulis terpisah dengan menggunakan fungsi compare().
5 komentar untuk "Pointer Ke Fungsi Bahasa C Beserta Penjelasannya"
Hubungi admin melalui Wa : +62-896-2414-6106
Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.
Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.
- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -
Apa yang dimaksud dengan pointer ke fungsi Bahasa C?
BalasHapus
HapusPointer ke fungsi Bahasa C merupakan pointer yang menunjuk ke alamat kode fungsi yang dapat dieksekusi.
Pointer ke fungsi dapat digunakan untuk memanggil fungsi dan meneruskan nilai fungsi tersebut sebagai argumen ke fungsi lainnya yang memerlukan.
HapusMetode pemanggilan pointer untuk meneruskan argumen ke suatu fungsi, dalah dengan cara menyalin alamat argumen ke dalam parameter formal.
HapusDi dalam fungsi, alamat pointer digunakan untuk mengakses argumen aktual yang digunakan dalam proses pemanggilan, yang berarti bahwa perubahan yang dilakukan pada parameter memengaruhi nilai argumen yang diteruskan.
Hapus