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 ; }