Pointer dalam Fungsi
13.7. Pointer dalam Fungsi
Pointer dan kaitannya dengan Fungsi di atas dimaksudkan agar fungsi yang akan dibahas berikut kalau dipanggil, variabel yang meliputi: Pointer sebagai parameter berkenaan dengan parameter aktual fungsi dan pointer sebagai keluaran dapat diubah nilainya, masing- fungsi
masing dinaikkan sebesar 2. Contoh pemanggilan :
13.7.1. Pointer Sebagai Parameter Fungsi
naikkan_nilai(&a, &b);
Penerapan pointer sebagai parameter yaitu jika diinginkan agar Perhatikan, dalam hal ini variabel a nilai suatu variabel internal dapat dan b harus ditulis diawali operator diubah oleh fungsi yang dipanggil. alamat (&) yang berarti menyatakan Perhatikan contoh fungsi berikut alamat variabel, sebab parameter dibawah ini.
fungsi dalam pendefinisian berupa pointer.
void naikkan_nilai (int *x, int *y)
*x = *x + 2;
13.7.2. Pointer Sebagai Fungsi
*y = *y + 2;
Keluaran
} Suatu fungsi dapat dibuat agar keluarannya berupa pointer. Misalnya, suatu fungsi menghasilkan
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pointer
keluaran berupa pointer yang menyatakan bahwa keluaran fungsi menunjuk ke string nama_bulan, nama_bulan() berupa pointer yang seperti pada contoh berikut.
menunjuk ke obyek char (atau string). Dalam fungsi nama_bulan(), mula- mula array bernama bulan
char *nama_bulan(int n) dideklarasikan dan sekaligus { diinisialisasi agar menunjuk sejumlah
static char *bulan[]= string yang menyatakan nama bulan. { "Kode bulan salah" , "Januari" , Di bagian akhir fungsi, pernyataan
"Februari" , Maret ", "April" , "Mei" , "Juni" , "Juli" , "Agustus" , return ( (n<1 || n>12) ? bulan[0] : "September" , "Oktober" , bulan[n] );
"Nopember" , "Desember" }; menyatakan bahwa hasil fungsi return ( (n< 1 | | n> 12 )
? bulan[ berupa pointer yang menunjuk ke 0 ] :
bulan[n] ); string “Kode bulan salah” (bulan[0]) jika masukan fungsi n<1
atau n>12 bulan[n] untuk n yang terletak
Pada definisi fungsi di atas, antara 1 sampai dengan 12.
char *nama_bulan()
Program 13.27. Fungsi dengan argumen berupa pointer. #include <stdio.h> void naikkan_nilai(int *x, int *y); main() { int a = 3; int b = 7; printf("SEMULA : a = %d b = %d\n", a, b); naikkan_nilai(&a, &b); printf("KINI : a = %d b = %d\n", a, b); } void naikkan_nilai(int *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_bulan(int n); main()
Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
{ int bl; printf("Bulan 1..12 : "); scanf("%d", &bl); printf("Bulan ke‐%d adalah %s\n", bl, nama_bulan(bl)); } char *nama_bulan(int n) { static char *bulan[] = { "Kode bulan salah", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" }; return ((n<1||n>12) ? 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 */ printf("Alamat x = %p\n", &x); printf("Isi px = %p\n", px); printf("Isi x = %d\n", x); printf("Nilai yang ditunjuk oleh px = %d\n", *px); printf("Nilai y = %d\n", y);
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pointer
Program 13.30. Mengakses isi suatu pointer dan tipe data yang ditunjuk variabel melalui pointer. Tipe variabel
harus sejenis.
#include <stdio.h> main() {
int *pu; int nu; int u = 1234; pu = &u; nu = *pu; printf("Alamat dari u = %p\n", &u); printf("Isi pu = %p\n", pu); printf("Isi u = %d\n", u); printf("Nilai yang ditunjuk oleh pu = %d\n", *pu); printf("Nilai nu = %d\n", nu);
Program 13.31. Mengubah isi suatu variabel melalui pointer. #include <stdio.h> main() {
float d = 54.5f, *pd; printf("Isi d mula‐mula = %g\n", d); pd = &d; *pd += 10; printf("Isi d sekarang = %g\n", d);
Program 13.32. Hubungan antara menunjukkan alamat elemen pertama pointer dan array. Suatu nama array
dari array (versi 1). yang ditulis tanpa dengan indeksnya
#include <stdio.h> main() {
static int tgl_lahir[] = {16, 4, 1974}; int *ptgl; printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]); }
Program 13.33. Hubungan antara menunjukkan alamat elemen pertama pointer dan array. Suatu nama array
dari array (versi 2). yang ditulis tanpa dengan indeksnya
#include <stdio.h> main() {
static int tgl_lahir[] = {16, 4, 1974}; int *ptgl, i; ptgl = tgl_lahir; printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); for (i=0; i<3; i++) printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i));
Program 13.34. Hubungan antara menunjukkan alamat elemen pertama pointer dan array. Suatu nama array
dari array (versi 3). yang ditulis tanpa dengan indeksnya
#include <stdio.h> main() {
static int tgl_lahir[] = {16, 4, 1974}; int i; int *ptgl; ptgl = tgl_lahir; printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); for (i=0; i<3; i++) printf("Nilai 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()
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pointer
{ char namax[PANJANG]; puts("SEMULA : "); printf("nama1 ‐‐> %s\n", nama1); printf("nama2 ‐‐> %s\n", nama2); strcpy(namax, nama1); strcpy(nama1, nama2); strcpy(nama2, namax); puts("KINI : "); printf("nama1 ‐‐> %s\n", nama1); printf("nama2 ‐‐> %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; puts("SEMULA : "); printf("nama1 ‐‐> %s\n", nama1); /* nama1 adl pointer yg menunjuk ke string GATUTKACA*/ printf("nama2 ‐‐> %s\n", nama2); /* nama2 adl pointer yg menunjuk ke string HANOMAN*/ namax = nama1; nama1 = nama2; nama2 = namax; puts("KINI : "); printf("nama1 ‐‐> %s\n", nama1); printf("nama2 ‐‐> %s\n", nama2);
Program 13.37. Pointer yang menunjuk ke pointer yang lain. #include <stdio.h> main() {
int a, *b, **c;
Direktorat Pembinaan SMK | 2008
Pointer Bahasa Pemrorgraman
printf("Nilai a = %d atau %d atau %d\n", a, *b, **c); printf("b = %p = alamat a di memori\n", b); printf("c = %p = alamat b di memori\n", c); printf("alamat 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; printf("Nilai var_x = *ptr1 = %d\n", *ptr1); printf("Nilai var_x = **ptr2 = %d\n\n", **ptr2); printf("ptr1 = &var_x = %p\n", ptr1); printf("ptr2 = &ptr1 = %p\n", ptr2); printf(" &ptr2 = %p\n", &ptr2);
Program 13.39. Fungsi dengan argumen berupa pointer. #include <stdio.h> void naikkan_nilai(int *x, int *y); main() {
int a = 3; int b = 7; printf("SEMULA : a = %d b = %d\n", a, b); naikkan_nilai(&a, &b); printf("KINI : a = %d b = %d\n", a, b);
void naikkan_nilai(int *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_bulan(int n);
2008 | Direktorat Pembinaan SMK
Bahasa Pemrograman Pointer
main() {
int bl; printf("Bulan 1..12 : "); scanf("%d", &bl); printf("Bulan ke‐%d adalah %s\n", bl, nama_bulan(bl));
char *nama_bulan(int n) {
static char *bulan[] = { "Kode bulan salah", "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" }; return ((n<1||n>12) ? bulan[0] : bulan[n]);