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