Pointer untuk fungsi
13.4. Pointer untuk fungsi
C++ memperbolehkan operasi Deklarasi pointer untuk function sama dengan pointer pada function. seperti prototype function kecuali Kegunaan yang utama adalah untuk
nama function dituliskan diantara memberikan satu function sebagai tanda kurung () dan operator asterisk parameter untuk function lainnya. (*) diberikan sebelum nama.
Program 13.4. pointer to functions #include <iostream.h>
using namespace std;
int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a‐b); } int (*minus)(int,int) = subtraction;
Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
int operation (int x, int y, int (*functocall)(int,int)) {
int g;
g = (*functocall)(x,y); return (g); } int main () {
int m,n;
m = operation ( 7 , 5 , addition); n = operation ( 20 , m, minus);
cout <<n;
return 0 ;
Keluaran program diatas adalah sebagai berikut:
Dari contoh diatas, minus ke suatu variable pointer px (yang merupakan pointer global untuk dideklarasikan sebagai pointer yang function yang mempunyai 2 menunjuk ke data bertipe int) yaitu: parameters bertipe int, kemudian diberikan untuk menunjuk function px = &x; subtraction, ditulis dalam satu baris instruksi :
Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari
int (* minus)(int,int) = subtraction;
x. Setelah pernyataan tersebut dieksekusi barulah dapat Agar suatu pointer menunjuk ke
variabel
dikatakan bahwa px menunjuk ke variabel lain, mula-mula pointer harus
variable x.
diisi dengan alamat dari variabel Jika suatu variabel sudah yang akan ditunjuk. Untuk ditunjuk oleh pointer, variabel yang menyatakan alamat dari suatu ditunjuk oleh pointer tersebut dapat variabel, operator & (operator alamat,
diakses melalui variabel itu sendiri bersifat unary) bisa dipergunakan, (pengaksesan langsung) ataupun dengan menempatkannya di depan melalui pointer (pengaksesan tak nama variabel. Sebagai contoh, bila x
langsung). Pengaksesan tak dideklarasikan sebagai variabel langsung dilakukan dengan bertipe int, maka
menggunakan operator indirection (tak langsung) berupa simbol * &x (bersifat unary). Contoh penerapan
operator * yaitu:
berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x
*px
2008 | Direktorat Pembinaan SMK
Ba ahasa Pemrogram man Pointer
ya ang menya atakan “isi atau nila ai
px = &x;
va ariabel/data yang dit tunjuk oleh h
po ointer px” . Sebagai co ontoh jika y y
namun t terdapat per rnyataan
be ertipe int, maka se sudah dua a
pe ernyataan be erikut
y = *px;
px x = &x; maka y y tidaklah be erisi nilai x, sebab y = = *px;
px belu um diatur a agar menun juk ke variabel l x. Hal s seperti ini harap
y akan berisi nilai yang sa ama dengan n
K Kalau pr rogram nil lai x. Kedua pernyataan n di atas
diperhat tikan.
melibatk kan pointer, dan pointer r belum diinisiali isasi, ada k kemungkinan n akan
px x = &x; terjadi masalah yang dina makan y = = *px;
“bug” yang bias s mengaki batkan kompute er tidak da apat dikend dalikan
se ebenarnya d dapat digant ikan dengan n (hang). Selain itu tip pe variabel pointer se ebuah perny ataan berup pa
dan tip pe data yan ng ditunjuk harus sejenis. Bila tidak s sejenis maka a akan
y = = x; terjadi hasil yang tidak diing ginkan. Untuk lebih jelasn nya lihat g gambar
Se eandainya pada progr ram di atas s
berikut.
tid dak terdapat pernyataan n
Gambar 13.
10. Ilustrasi Kesalahan Yang Terjad di Karena Ti pe Tidak Se ejenis
Pr rogram 13.5 . Mengakse s isi suatu v ariabel mela alui pointer. #in nclude <stdio o.h> #in nclude <iostre eam.h>
us sing namespa ace std;
Direktorat t Pembinaan SM MK | 2008
Pointer Bahasa Pemrorgraman
main() { int y, x = 87 ; int *px; px = &x; y = *px; cout << "Alamat x = \n" << &x; cout << "Isi px = \n" << px; cout << "Isi x = \n" << x; cout << "Nilai yang ditunjuk oleh px = \n" << *px; cout << "Nilai y = \n" << y;
Mengakses isi suatu variabel melalui pointer. Tipe variabel pointer dan tipe data yang ditunjuk harus sejenis
Program 13.6 #include <conio.h> #include <iostream.h>
using namespace std;
main() {
int *pu; int nu; int u= 1234 ; pu = &u; nu = *pu; cout << "Alamat dari u = \n" << &u; cout << "Isi pu = \n" << pu; cout << "Isi u = \n" << u; cout << "Nilai yang ditunjuk oleh pu = \n" << *pu; cout << "Nilai nu = \n" << nu; getch();
return 0 ; }
Program 13.7 #include <conio.h> #include <iostream.h>
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pointer
using namespace std;
main() {
int z= 20 , s= 30 ;
int *pz, *ps; pz = &z; ps = &s; *pz += *ps; cout << "z = \n" << z; cout << "s = \n" << s; getch();
return 0 ; }
Program 13.8 #include <conio.h> #include <iostream.h>
using namespace std;
main() {
char c = 'Q'; char *char_pointer = &c; cout << "\n" << c << *char_pointer;
c = '/'; cout << "\n" << c << *char_pointer; *char_pointer = '('; cout << "\n" << c << *char_pointer; getch();
return 0 ; }
Program 13.9 #include <conio.h> #include <iostream>
using namespace std;
int main() {
Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
int x= 1 , y= 2 ; int *ip; ip = &x; y = *ip; x = ip;
*ip = 3 ; cout << "x =" << x; cout << "y =" << y; getch();
return 0 ; }