Pointer Sebagai Parameter Fungsi Pointer Sebagai Fungsi Keluaran

460 Direktorat Pembinaan SMK | 2008 keluaran berupa pointer yang menunjuk ke string nama_bulan, seperti pada contoh berikut. char nama_bulanint n { static char bulan[]= { Kode bulan salah , Januari , Februari , Maret , April , Mei , Juni , Juli , Agustus , September , Oktober , Nopember , Desember }; return n 1 | | n 12 ? bulan[ ] : bulan[n] ; } Pada definisi fungsi di atas, char nama_bulan menyatakan bahwa keluaran fungsi nama_bulan berupa pointer yang menunjuk ke obyek char atau string. Dalam fungsi nama_bulan, mula- mula array bernama bulan dideklarasikan dan sekaligus diinisialisasi agar menunjuk sejumlah string yang menyatakan nama bulan. Di bagian akhir fungsi, pernyataan return n1 || n12 ? bulan[0] : bulan[n] ; menyatakan bahwa hasil fungsi berupa pointer yang menunjuk ke  string “Kode bulan salah” bulan[0] jika masukan fungsi n1 atau n12  bulan[n] untuk n yang terletak antara 1 sampai dengan 12. Program 13.27. Fungsi dengan argumen berupa pointer. include stdio.h void naikkan_nilaiint x, int y; main { int a = 3; int b = 7; printfSEMULA : a = d b = d\n, a, b; naikkan_nilaia, b; printfKINI : a = d b = d\n, a, b; } void naikkan_nilaiint x, int y { x = x + 2; y = y + 2; } Program 13.28. Fungsi dengan keluaran berupa pointer yang menunjuk string. include stdio.h char nama_bulanint n; main 2008 | Direktorat Pembinaan SMK 461 { int bl; printfBulan 1..12 : ; scanfd, bl; printfBulan ke‐d adalah s\n, bl, nama_bulanbl; } char nama_bulanint n { static char bulan[] = { Kode bulan salah, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember }; return n1||n12 ? bulan[0] : bulan[n]; } Program 13.29. Mengakses isi suatu variabel melalui pointer. include stdio.h main { int y, x = 87; x y bertipe int int px; var pointer yg menunjuk ke data yang bertipe int px = x; px diisi dgn alamat dari variabel x y = px; y diisi dgn nilai yang ditunjuk oleh px printfAlamat x = p\n, x; printfIsi px = p\n, px; printfIsi x = d\n, x; printfNilai yang ditunjuk oleh px = d\n, px; printfNilai y = d\n, y; 462 Direktorat Pembinaan SMK | 2008 } Program 13.30. Mengakses isi suatu variabel melalui pointer. Tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. include stdio.h main { int pu; int nu; int u = 1234; pu = u; nu = pu; printfAlamat dari u = p\n, u; printfIsi pu = p\n, pu; printfIsi u = d\n, u; printfNilai yang ditunjuk oleh pu = d\n, pu; printfNilai nu = d\n, nu; } Program 13.31. Mengubah isi suatu variabel melalui pointer. include stdio.h main { float d = 54.5f, pd; printfIsi d mula‐mula = g\n, d; pd = d; pd += 10; printfIsi d sekarang = g\n, d; } Program 13.32. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan indeksnya menunjukkan alamat elemen pertama dari array versi 1. include stdio.h main { static int tgl_lahir[] = {16, 4, 1974}; int ptgl; printfNilai yang ditunjuk oleh ptgl = d\n, ptgl; 2008 | Direktorat Pembinaan SMK 463 printfNilai dari tgl_lahir[0] = d\n, tgl_lahir[0]; } Program 13.33. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan indeksnya menunjukkan alamat elemen pertama dari array versi 2. include stdio.h main { static int tgl_lahir[] = {16, 4, 1974}; int ptgl, i; ptgl = tgl_lahir; printfNilai yang ditunjuk oleh ptgl = d\n, ptgl; for i=0; i3; i++ printfNilai dari tgl_lahir[i] = d\n, ptgl+i; } Program 13.34. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan indeksnya menunjukkan alamat elemen pertama dari array versi 3. include stdio.h main { static int tgl_lahir[] = {16, 4, 1974}; int i; int ptgl; ptgl = tgl_lahir; printfNilai yang ditunjuk oleh ptgl = d\n, ptgl; for i=0; i3; i++ printfNilai dari tgl_lahir[i] = d\n, ptgl++; } Program 13.35. Menukarkan isi 2 string tanpa pemakaian pointer. include stdio.h include string.h define PANJANG 20 char nama1[PANJANG] = GATUTKACA; char nama2[PANJANG] = HANOMAN; main 464 Direktorat Pembinaan SMK | 2008 { char namax[PANJANG]; putsSEMULA : ; printfnama1 ‐‐ s\n, nama1; printfnama2 ‐‐ s\n, nama2; strcpynamax, nama1; strcpynama1, nama2; strcpynama2, namax; putsKINI : ; printfnama1 ‐‐ s\n, nama1; printfnama2 ‐‐ s\n, nama2; } Program 13.36. Menukarkan isi 2 string dengan fasilitas pointer. include stdio.h include string.h char nama1 = GATUTKACA; char nama2 = HANOMAN; main { char namax; putsSEMULA : ; printfnama1 ‐‐ s\n, nama1; nama1 adl pointer yg menunjuk ke string GATUTKACA printfnama2 ‐‐ s\n, nama2; nama2 adl pointer yg menunjuk ke string HANOMAN namax = nama1; nama1 = nama2; nama2 = namax; putsKINI : ; printfnama1 ‐‐ s\n, nama1; printfnama2 ‐‐ s\n, nama2; } Program 13.37. Pointer yang menunjuk ke pointer yang lain. include stdio.h main { int a, b, c; a = 155; b = a; c = b; 2008 | Direktorat Pembinaan SMK 465 printfNilai a = d atau d atau d\n, a, b, c; printfb = p = alamat a di memori\n, b; printfc = p = alamat b di memori\n, c; printfalamat c di memori = p\n, c; } Program 13.38. Pointer yang menunjuk ke pointer yang lain. include stdio.h main { int var_x = 273; int ptr1; int ptr2; ptr1 = var_x; ptr2 = ptr1; printfNilai var_x = ptr1 = d\n, ptr1; printfNilai var_x = ptr2 = d\n\n, ptr2; printfptr1 = var_x = p\n, ptr1; printfptr2 = ptr1 = p\n, ptr2; printf ptr2 = p\n, ptr2; } Program 13.39. Fungsi dengan argumen berupa pointer. include stdio.h void naikkan_nilaiint x, int y; main { int a = 3; int b = 7; printfSEMULA : a = d b = d\n, a, b; naikkan_nilaia, b; printfKINI : a = d b = d\n, a, b; } void naikkan_nilaiint x, int y { x = x + 2; y = y + 2; } Program 13.40. Fungsi dengan keluaran berupa pointer yang menunjuk string. include stdio.h char nama_bulanint n; 466 Direktorat Pembinaan SMK | 2008 main { int bl; printfBulan 1..12 : ; scanfd, bl; printfBulan ke‐d adalah s\n, bl, nama_bulanbl; } char nama_bulanint n { static char bulan[] = { Kode bulan salah, Januari, Februari, Maret, April, Mei, Juni, Juli, Agustus, September, Oktober, November, Desember }; return n1||n12 ? bulan[0] : bulan[n]; }

13.8. Fungsi Pointer ke Static Class Member Function

penggunaan function pointer pada C++ dibatasi, yaitu function pointer tidak boleh menunjuk pada function yang berada dalam sebuah class class member function kecuali function tersebut berjenis static. class A { private : public : static void WriteStringchar String; }; 2008 | Direktorat Pembinaan SMK 467 void A::WriteStringchar String { printfA::WriteString : s,String; } class B { private : public : void Funcvoid Writerchar str; }; void B::Funcvoid Writerchar str { Writerclass B writing \hello...\; } int mainvoid { A a = new A; B b = new B; b‐Funca‐WriteString; delete a; delete b; } Namun terkadang yang menjadi masalah adalah, sebuah member function yang berjenis static, tidak memiliki akses ke member dari class, sebagai contoh bila kita rubah class A menjadi : class A { private : int privatenumber; public : static void WriteStringchar String; }; void A::WriteStringchar String { printfA::privatenumber = d,privatenumber; printfA::WriteString : s,String; }