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