MAKALAH POINTER PADA BAHASA C

dokumen-dokumen yang mirip
BAB VIII POINTER. Tujuan :

main() { int y, x = 87; /* x & y bertipe int */ int *px; /* var pointer yg menunjuk ke data yang bertipe int */

POINTER DASAR PEMROGRAMAN

xxxx alamat Praktikum 11 POINTER

POINTER. Praktikum 10 (3/5) A. TUJUAN 1. Menjelaskan tentang Pointer to Array 2. Menjelaskan tentang Pointer to String

Pointer 2 A. TUJUAN PEMBELAJARAN. 1. Memahami tentang Pointer to Array 2. Memahami tentang Pointer to String

Konsep Pemrograman. Bab 12. Pointer 2. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

DIKTAT MATA KULIAH PEMROGRAMAN I BAB XI POINTER

POINTER I. Oleh : Mike Yuliana PENS-ITS

PRAKTIKUM 12 POINTER 2

PRAKTIKUM 12 POINTER 2

void naikkan_nilai (int *x, int *y) { *x = *x + 2; *y = *y + 2; }

PRAKTIKUM 11 POINTER 1

POINTER. Pemrograman Bahasa C++

Konsep Pemrograman. Bab 13. Pointer 3. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

A. TUJUAN 1. Menjelaskan tentang konsep dari variabel pointer. zzzz. Address. Gambar 8.1 Variabel pointer px menunjuk ke variabel x

POINTER II. Oleh : Mike Yuliana PENS-ITS

Pointer 1 A. TUJUAN PEMBELAJARAN

PRAKTIKUM 11 POINTER 1

Pointer. Yuliana Setiowati

Konsep Pemrograman. Bab 11. Pointer 1. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

Praktikum 1. Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa : tipe_data nama_var[ukuran];

Achmad Solichin.

MODUL. Pointer. Modul Praktikum C++ Dasar Pemrograman Komputer JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNIK

ALUR PROGRAM. SELEKSI KONDISI Statement If a. Bentuk If tunggal sederhana Sintaks : if ( kondisi ) statement ;

ALGORITMA DAN STRUKTUR DATA

BAB 10 POINTER 5.1 Tujuan 5.2 Pengertian Pointer Perubah dinamis pointer

Pointer, File Header & Makro

By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto Structure and Pointer

PENGENALAN BAHASA C. A. Struktur Kode Program dalam Bahasa C Secara garis besar, suatu kode program dalam bahasa C memiliki struktur umum seperti ini:

TUGAS TEORI ALGO LANJUT

A. TUJUAN 1. Menjelaskan tentang prinsip dasar fungsi. 2. Menjelaskan tentang.parameter formal dan parameter aktual

Pointer. ted = &andy;

8. Pointer. S. Indriani L, M.T

Fungsi DASAR PEMROGRAMAN

Pemrograman Dasar C. Minggu 9

Algoritma dan Struktur Data. Pertemuan 5 Pointer

Fungsi : Dasar Fungsi

PRAKTIKUM 7 FUNGSI 1

ARRAY & POINTER. Listing 8.1. EXPENSES.C demonstrates the use of an array. AP3: Array & Pointer

ALGORITMA DAN STRUKTUR DATA POINTER DAN FUNCTION

VARIABEL & TIPE DATA PEMROGRAMAN C++

Pengenalan C++ Oleh : Dewi Sartika

MENGENAL POINTER. Mengetahui Alamat variabel. Output :

E STRUKTUR DATA & E PRAKTIK STRUKTUR DATA. Pointer & Function. Alfa Faridh Suni, S.T., M.T. PTIK

Minggu ke-10 Pointer. Pendahuluan. Objektif. Bahan Bacaan

Fungsi, Parameter, Rekursi

Kurikulum Qt. { Basic OOP } Chapter 4. Function

BAB V FUNGSI Tujuan : 5.1 Dasar Fungsi

Fungsi 1 DASAR PEMROGRAMAN

FUNCTION (FUNGSI) LOGO. Pendidikan Teknik Elektronika FT UNY. Muh. Izzuddin Mahali, M.Cs.

Fungsi DASAR PEMROGRAMAN

12/29/2011 ILKOM IPB 1. Algoritme dan Pemrograman. Address and Pointers. Pointer

Pemrograman Dasar C. Minggu 10

Bahasa C melengkapi fasilitas modular dengan menggunakan fungsi pada setiap SubProgram. Contoh pembagian program menjadi beberapa subprogram.

MODUL V POINTER DAN STRING

POINTER. Tim Alpro Teknik Informatika

Algoritme dan Pemrograman

POINTER. Tim Alpro Teknik Informatika

Algoritma Pemrograman. Fery Updi,M.Kom

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

BAB 6 FUNGSI TUJUAN PRAKTIKUM

Fungsi Lanjut DASAR PEMROGRAMAN

VI. FUNGSI. Fungsi Main ( ) Fungsi a ( ) Fungsi b ( ) Fungsi c ( ) Fungsi c1 ( ) Fungsi c2 ( ) Fungsi c3 ( ) Bentuk umumnya :

ARRAY. Karakteristik

MODUL PRAKTIKUM BAHASA PEMROGRAMAN TESTRUKTUR MODUL 8 POINTER

Struktur Dasar Bahasa C Tipe Data Dalam bahasa C terdapat lima tipe data dasar, yaitu :

Algoritma Pemrograman 2B (Pemrograman C++)

Array LOGO. Pendidikan Teknik Elektronika FT UNY. Muh. Izzuddin Mahali, M.Cs.

Algoritma dan Struktur Data. Pointer Pada Struct

FAKULTAS TEKNIK UNIVERSITAS NEGERI YOGYAKARTA LAB SHEET BAHASA PEMROGRAMAN Fungsi : Passing Parameter by Value & Semester 3

Tipe Data. Adri Priadana

A. TUJUAN 1. Memecah program dalam fungsi fungsi yang sederhana. 2. Menjelaskan tentang pemrograman terstruktur.

Pointer. Pointer adalah variabel yang menyimpan alamat dari variabel yang lainnya. Deklarasi pointer : datatype *ptr_name; Contoh:

Pointer. Objektif. Bahan Bacaan

Bab 2. Dasar-Dasar Pemrograman C

ALGORITMA DAN PEMROGRAMAN 2. 3 SKS By : Sri Rezeki Candra Nursari

PRAKTIKUM 10 STRING A B C D E \0. Gambar 11.1 Komposisi penyimpanan string dalam memori

01. Review Array, Pointer dan Struktur

FUNGSI & PROSEDUR. Pertemuan ke-12 dan 13

void tukar_xy(struct koordinat *pos_xy){ int z; z = (*pos_xy).x; (*pos_xy).x = (*pos_xy).y; (*pos_xy).y = z;

B. DASAR TEORI B.1 Array Suatu array berdimensi satu dideklarasikan dalam bentuk umum berupa : tipe_data nama_var[ukuran];

Seluruh elemen di dalam struktur array mempunyai tipe data yang sama. Random Access

Tabel Informasi. Hal di atas dapat dilakukan dengan menambah dan mengambil atribut identifier yang digunakan pada program, melalui tabel informasi.

pada program di atas, akan ditampilkan alamat memori dari variabel x, bukan nilai x.

STRING DASAR PEMROGRAMAN

1 MODUL 8 POINTER MODUL 8 POINTER

Algoritma Pemrograman. Fery Updi,M.Kom

Kurikulum Qt. Chapter 4 Function. Fungsi

Konsep Pemrograman. Bab 7. Fungsi1. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

BAB VI BAHASA C Pendahuluan

Function nama dipisahkan

Konsep Pemrograman. Bab 8. Fungsi 2. Konsep Pemrograman Politeknik Elektronika Negeri Surabaya 2006 PENS-ITS. Umi Sa adah

KONSEP DASAR. menyusunnya menjadi potongan-potongan mudah untuk ditangani dibanding. conquer.

BAB VII STRING Konstanta String Suatu konstanta string ditulis dengan diawali dan diakhiri tanda petik ganda, misalnya:

Pendahuluan Pemrograman Mikrokontroler

A R R A Y. Bentuk umum deklarasi array : type nama_array[ukuran] tipe : menyatakan tipe dasar array ukuran : menyatakan banyaknya elemen pada array

MODUL 10 Fungsi 10.1 Kompetensi 10.2 Alat Dan Bahan: 10.3 Ulasan Teori: Dasar Fungsi Deklarasi Fungsi

PEMROGRAMAN DAN METODE NUMERIK Semester 2/ 2 sks/ MFF 1024

Transkripsi:

MAKALAH POINTER PADA BAHASA C DI SUSUN OLEH : 1. MAHBUB MASYHURI (54411245) 2. REZA FEBRIANTO (58411368) 3. TITO ANUGRAH SUKARNO (57411126) KELAS 21A03 UNIVERSITAS GUNADARMA TAHUN AJARAN PTA 2012 KATA PENGANTAR

Segala puji bagi Tuhan Yang Maha Esa karena berkat rahmat dan hidayah-nya kami dapat menyelasaikan makalah ini tepat waktu dan dengan sebaik-baiknya. Makalah ini disusun agar pembaca dapat memperluas ilmu tentang Pointer pada Bahasa Pemrograman C yang kami sajikan berdasarkan pengamatan dari beberapa sumber. Penyusun sangat berterima kasih kepada semua pihak yang telah membantu menyelesaikan makalah ini. Semoga makalah ini dapat bermanfaat dan memberikan wawasan yang lebih luas kepada pembaca. Walaupun makalah ini memiliki kelebihan dan kekurangan, penyusun mohon kepada pembaca untuk memberi saran dan kritik yang bersifat membangun. Depok, 19 Desember 2012 Penyusun 1

DAFTAR ISI Kata Pengantar 1 Daftar Isi 2 A. Pengertian Pointer 3 B. Deklarasi Pointer 4 C. Inisialisasi Variabel Pointer 4 D. Mengatur Pointer Agar Menunjuk ke Variabel Lain 5 E. Mengakses isi suatu variabel melalui Pointer 5 F. Mengakses dan Mengubah isi suatu variabel Pointer 8 G. Pointer dan Array (pointer to array) 9 H. Pointer dan String (pointer to string 11 I. Array dari Pointer (Array of Pointer) 14 J. Pointer menunjuk Pointer (Pointer to Pointer) 15 K. Pointer Sebagai Parameter Fungsi 16 L. Pointer Sebagai Keluaran Fungsi (return value) 17 Daftar Pustaka 2

POINTER A. PENGERTIAN POINTER Suatu pointer (variable penunjuk) adalah suatu variable yang berisi dengan alamat lokasi, yaitu suatu memori tertentu. Bahasa C menyediakan 2 buah operator untuk operasi pointer yaitu operator * dan operator &. Operator alamat (Address operator (&)) Pada pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory. Hal ini akan dilakukan secara otomatis oleh compiler dan operating system pada saat run-time. Jika ingin mengetahui di mana suatu variable disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) di depan variable, yang berarti address off. Contoh : Buku = &bahasa; Akan memberikan variabel buku alamat dari bahasa, karena variable bahasa diberi awalan ampersand (&), maka menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan bahasa diletakkan di alamat 1776 kemudian dituliskan instruksi sbb: Bahasa = 25; Sejarah = bahasa; buku = &bahasa; Maka hasilnya Bahasa 25 1775 1776 1777 Sejarah Buku 25 1776 Operator Reference (*) Dengan menggunakan pointer kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk(*) pada identifier pointer, yang berarti value pointed by. Contoh ; BhsC = *buku; 3

(dapat dikatakan bahwa BhsC sama dengan nilai yang ditunjuk oleh buku). BhsC = 25, karena buku di alamat 1776, dan nilai yang berda pada lamat 1776 adalah 25. B. Deklarasi Pointer Variabel pointer dideklarasikan dengan nama variabelnya ditulis dengan diawali karakter asterisk. Bentuk umum : Tipe-data *nama-variabel-pointer; Contoh : int *data; berarti data adalah sebuah pointer yang menunjuk ke jenis data integer. Tipe dari variable pointer menunjukkan tipe dari data yang ditunjuknya. C. Inisialisasi Variabel Pointer Pemberian harga awal pada variable-variabel pointer dapat sekaligus dilakukan pada saat variable-variabel tersebut dideklarasikan. Harga awal yang diberikan adalah alamat lokasi memory. Contoh : int i,j; int *intptr = &i; atau bisa juga int i,j, *intptr ; intptr = &i ; intptr variable pointer ke jenis data integer dengan memberi harga awal berupa alamat variable i. Contoh : #include<stdio.h> void main( ) int i,j, *intptr; i = 890; ptintf( variable i terletak pd alamat memory %p.\n,&i); printf( alamat i = %p,menerima nilai %d\n,&i, i); intptr = &i; // intptr menunjuk alamat variable i printf( alamat intptr = %p, menunjuk ke nilai %d\n,intptr,*intptr); j = *intptr; printf( alamat j = %p,menerima nilai %d\n,&j, j); 4

output : variable i terletak pd alamat memory 255F:2272. alamat i = 255F:2272., menerima nilai 890 alamat intptr = 255F:2272., menunjuk ke nilai 890. alamat j = 255F:2272, menerima nilai 890 D. Mengatur Pointer agar Menunjuk ke Variabel Lain Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int, maka &x berarti alamat dari variabel x. Adapun contoh pemberian alamat x ke suatu variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu : px = &x; Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x. E. Mengakses Isi Suatu Variabel Melalui Pointer Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary). Contoh penerapan operator * yaitu : *px yang menyatakan isi atau nilai variabel/data yang ditunjuk oleh pointer px. Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan berikut px = &x; y = *px; y akan berisi nilai yang sama dengan nilai x. Untuk lebih jelasnya perhatikan contoh 5

program ptr1.c /* Program : ptr1.c */ int y, x = 87; /* x & y bertipe int */ int *px; /* var pointer yang menunjuk ke data yang bertipe int */ px = &x; /* px diisi dengan alamat dari variabel x */ y = *px; /* y diisi dengan nilai yg 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); Contoh eksekusi : Alamat x = 0012FF78 Isi px = 0012FF78 Isi x = 87 Nilai yang ditunjuk oleh px = 87 Nilai y = 87 Pada program di atas, dua pernyataan px = &x; y = *px; sebenarnya dapat digantikan dengan sebuah pernyataan berupa y = x; Seandainya pada program di atas tidak terdapat pernyataan px = &x; namun terdapat pernyataan y = *px; maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x. Hal 6

seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan bug yang bisa mengakibatkan komputer tidak dapat dikendalikan (hang). Selain itu tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. Bila tidak sejenis maka akan terjadi hasil yang tidak diinginkan. Lebih jelasnya perhatikan contoh program ptr2.c. /* Program : ptr2.c */ include <stdio.h> 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); Pada contoh di atas, saat penugasan pu = &u; maka pu akan menunjuk data berukuran 4 byte (tipe float) sekalipun u berukuran 2 byte (tipe int). Oleh karena itu, pernyataan nu = *pu; tidak akan membuat nu berisi nilai u. untuk lebih jelasnya lihat gambar berikut. 7

F. Mengakses dan Mengubah isi Suatu Variabel Pointer Contoh berikut memberikan gambaran tentang pengubahan isi suatu variabel secara tak langsung (yaitu melalui pointer). Mula-mula pd dideklarasikan sebagai pointer yang menunjuk ke suatu data bertipe float dan d sebagai variabel bertipe float. Selanjutnya d = 54.5; digunakan untuk mengisikan nilai 54,5 secara langsung ke variabel d. Adapun pd = &d; digunakan untuk memberikan alamat dari d ke pd. Dengan demikian pd menunjuk ke variabel d. Sedangkan pernyataan berikutnya *pd = *pd + 10; (atau: *pd += 10; ) merupakan instruksi untuk mengubah nilai variabel d secara tak langsung. Perintah di atas berarti jumlahkan yang ditunjuk pd dengan 10 kemudian berikan ke yang ditunjuk oleh pd, atau identik dengan pernyataan d = d + 10; Akan tetapi, seandainya tidak ada instruksi pd = &d; maka pernyataan *pd = *pd + 10; tidaklah sama dengan d = d + 10; 134 /* Program : ptr3.c */ 8

float d = 54.5f, *pd; printf("isi d mula-mula = %g\n", d); pd = &d; *pd += 10; printf("isi d sekarang = %g\n", d); Contoh eksekusi : Isi d mula-mula = 54.5 Isi d sekarang = 64.5\ G. Pointer dan Array (pointer to array) Hubungan antara pointer dan array pada C sangatlah erat. Sebab sesungguhnya array secara internal akan diterjemahkan dalam bentuk pointer. Pembahasan berikut akan memberikan gambaran hubungan antara pointer dan array. Misalnya dideklarasikan di dalam suatu fungsi static int tgl_lahir[3] = 01, 09, 64 ; dan int *ptgl; Kemudian diberikan instruksi ptgl = &tgl_lahir[0]; //pointer to array of integer maka ptgl akan berisi alamat dari elemen array tgl_lahir yang berindeks nol. Instruksi di atas bisa juga ditulis menjadi ptgl = tgl_lahir; sebab nama array tanpa tanda kurung menyatakan alamat awal dari array. Sesudah penugasan seperti di atas, 9

*ptgl dengan sendirinya menyatakan elemen pertama (berindeks sama dengan nol) dari array tgl_lahir. Hal ini bisa dilihat melalui pembuktian program berikut. /* Program : ptr4.c */ static int tgl_lahir[] = 16, 4, 1974; int *ptgl; ptgl = tgl_lahir; printf("nilai yang ditunjuk oleh ptgl = %d\n", *ptgl); printf("nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]); Contoh eksekusi : Nilai yang ditunjuk oleh ptgl = 16 Nilai dari tgl_lahir[0] = 16 /* Program : ptr5.c */ 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)); 136 10

Contoh eksekusi: Nilai yang ditunjuk oleh ptgl = 16 Nilai dari tgl_lahir[0] = 16 Nilai dari tgl_lahir[1] = 4 Nilai dari tgl_lahir[2] = 1974 /* Program : ptr6.c */ 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++); Keterangan : tgl_lahir[i] = *(ptgl+i) = *ptgl++ H. Pointer dan String (pointer to string) Contoh hubungan pointer dan string ditunjukkan pada program berikut. /* Program : ptr4.c */ 11

/* pkota menunjuk konstanta string SEMARANG */ char *pkota = SEMARANG ; printf( String yang ditunjuk oleh pkota = ); puts(pkota); // printf( %s\n, pkota); Contoh eksekusi : String yang ditunjuk oleh pkota = SEMARANG Pada program di atas, char *pkota = SEMARANG ; akan menyebabkan kompiler mengalokasikan variabel pkota sebagai variabel pointer yang menunjuk ke obyek bertipe char dan menempatkan konstanta SEMARANG dalam suatu memori kemudian pointer pkota akan menunjuk ke lokasi string SEMARANG. Pernyataan di atas menyerupai pernyataan char kota[] = SEMARANG ; tetapi sebenarnya kedua pernyataan inisialisasi di depan tidaklah tepat sama. Sebab pkota adalah pointer (menyatakan alamat) yang dengan mudah dapat diatur agar menunjuk ke string lain (bukan string SEMARANG ), sedangkan kota adalah array (array menyatakan alamat yang konstan, tak dapat diubah). Perhatikan dua program di bawah ini /* Program : arrnama.c Menukarkan isi 2 string tanpa pemakaian pointer */ 12

#include <string.h> #define PANJANG 20 char nama1[panjang] = "JAMES BOND"; char nama2[panjang] = "HERCULE POIROT"; 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 : ptrnama.c Menukarkan isi 2 string dengan fasilitas pointer */ #include <string.h> char *nama1 = "JAMES BOND"; char *nama2 = "HERCULE POIROT"; char *namax; puts("semula : "); printf("nama1 --> %s\n", nama1); /* nama1:pointer yg menunjuk ke string JAMES BOND */ printf("nama2 --> %s\n", nama2); /* nama2:pointer yg menunjuk ke string HERCULE POIROT */ 13

namax = nama1; nama1 = nama2; nama2 = namax; puts("kini : "); printf("nama1 --> %s\n", nama1); printf("nama2 --> %s\n", nama2); I. Array dari Pointer (Array of Pointer) Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh: char *namahari[10]; merupakan pernyataan untuk mendeklarasikan array pointer. Array namahari terdiri dari 10 elemen berupa pointer yang menunjuk ke data bertipe char. Array pointer bisa diinisialisasi sewaktu pendeklarasian. Sebagai contoh: static char *namahari[] = Senin, Selasa, Rabu, Kamis, Jumat, Sabtu, Minggu ; Pada contoh ini, namahari[0] berisi alamat yang menunjuk ke string Senin. namahari[1] berisi alamat yang menunjuk ke string Selasa. namahari[2] berisi alamat yang menunjuk ke string Rabu. dan sebagainya. 14

J. Pointer menunjuk Pointer (Pointer to Pointer) Suatu pointer bisa saja menunjuk ke pointer lain. Gambar berikut memberikan contoh mengenai pointer menunjuk pointer. Untuk membentuk rantai pointer seperti pada gambar di atas, pendeklarasian yang diperlukan berupa int var_x; int *ptr1; int **ptr2; Perhatikan pada deklarasi di depan: var_x adalah variabel bertipe int. ptr1 adalah variabel pointer yang menunjuk ke data bertipe int. ptr2 adalah variabel pointer yang menunjuk ke pointer int. (itulah sebabnya deklarasinya berupa int **ptr2; ) Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa ptr1 = &var_x; Sedangkan supaya ptr2 menunjuk ke ptr1, instruksi yang diperlukan adalah ptr2 = &ptr1; Contoh berikut memberikan gambaran cara pengaksesan nilai pada var_x melalui pointer ptr2 dan ptr1. 15

/* File program : ppointer.c Contoh program untuk pointer yang menunjuk pointer */ int var_x = 273; int *ptr1; int **ptr2; ptr1 = &var_x; ptr2 = &ptr1; printf("nilai var_x = %d\n", *ptr1); printf("nilai var_x = %d\n", **ptr2); Contoh eksekusi : Nilai var_x = 273 Nilai var_x = 273 Pointer dalam Fungsi Pointer dan kaitannya dengan fungsi yang akan dibahas berikut meliputi : Pointer sebagai parameter fungsi Pointer sebagai keluaran fungsi K. Pointer Sebagai Parameter Fungsi Penerapan pointer sebagai parameter yaitu jika diinginkan agar nilai suatu variabel internal dapat diubah oleh fungsi yang dipanggil. Sebagai contoh dapat dilihat pada fungsi berikut. void naikkan_nilai (int *x, int *y) *x = *x + 2; *y = *y + 2; 16

Fungsi di atas dimaksudkan agar kalau dipanggil, variabel yang berkenaan dengan parameter aktual dapat diubah nilainya, masing-masing dinaikkan sebesar 2. Contoh pemanggilan : naikkan_nilai(&a, &b); Perhatikan, dalam hal ini variabel a dan b harus ditulis diawali operator alamat (&) yang berarti menyatakan alamat variabel, sebab parameter fungsi dalam pendefinisian berupa pointer. /* Program : argptr.c Fungsi dengan argumen berupa pointer */ void naikkan_nilai(int *, int *); int a = 3, 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; Contoh eksekusi : Semula : a = 3 b = 7 Kini : a = 5 b = 9 L. Pointer Sebagai Keluaran Fungsi (return value) Suatu fungsi dapat dibuat agar keluarannya berupa pointer. Misalnya, suatu fungsi 17

menghasilkan keluaran berupa pointer yang menunjuk ke string nama_bulan, seperti pada contoh berikut. char *nama_bulan(int 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[0] : 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 ( (n<1 n>12)? bulan[0] : bulan[n] ); menyatakan bahwa hasil fungsi berupa pointer yang menunjuk ke string Kode bulan salah (bulan[0]) jika masukan fungsi n<1 atau n>12 bulan[n] untuk n yang terletak antara 1 sampai dengan 12. /* File program : pbulan.c Fungsi dengan keluaran berupa pointer yang menunjuk string */ 18

char *nama_bulan(int n); //prototype function int bl; char *pch; printf("masukkan Bulan 1..12 : "); scanf("%d", &bl); pch = nama_bulan(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]); 19

DAFTAR ISI H.M, Jogiyanto.2008. Konsep Dasar Bahasa Pemrograman C.Informatika Rachmat, Antonius.2010."Algoritma dan Pemrograman dengan Bahasa C".Yogyakarta : ANDI. 20