Upload
steven-bosch
View
9
Download
5
Embed Size (px)
DESCRIPTION
pointer
Citation preview
PERTEMUAN VI
POINTER
6.1 Tujuan Praktikum
Praktikan mengenal type data Pointer, mengerti tentang konsep dasar dari
pointer, dapat mendeklarasikan pointer di Pascal serta dapat menggunakannya di
dalam sebuah program. Mengerti tentang pembuatan array dengan menggunakan
pointer, serta tahu cara mengalokasikan dan mende-alokasikan suatu variabel
didalam sebuah program.
6.2 Teori Penunjang
Pointer adalah suatu variabel yang menunjuk ke alamat memory variabel
yang lainnya. Dengan menggunakan pointer banyak hal dapat dilakukan seperti
melewatkan suatu variabel yang ada di dalam fungsi yang telah di bahas pada bab-
bab sebelumnya.
Suatu pointer bukan berisi dengan suatu nilai data seperti halnya pada
variabel biasa, variabel pointer berisi dengan suatu alamat. Untuk mendeklarasikan
variabel pointer kita menggunakan tanda asterik / bintang (*) didepan variabel yang
di deklarasikan pada tipe data tertentu. Tanda ini juga dapat dipakai untuk
mengakses nilai dari variabel yang telah ditunjuk. Untuk mendapatkan alamat dari
variabel pointer kita menggunakan tanda &. Untuk lebih mengerti uraian diatas
perhatikan ilustrasi berikut ini :
#include
void main()
{
int *px, x, y; // mendeklarasikan variabel pointer px bertipe integer
x = 1000; // memberikan nilai x sama dengan 1000
px = &x; // dengan statement ini variabel pointer sekarang menunjuk
ke alamat variabel x
y = *px; // mengakses variabel yang ditunjuk oleh pointer
cout
Hasil dari program diatas adalah :
FFDD
1000
Dari ilustrasi diatas dapat kita lihat bahwa px (yang merupakan variabel
pointer) berisi alamat dari variabel x. Sedangkan jika kita hendak mengakses nilai
dari variabel yang ditunjuk oleh variabel pointer (nilai dari variabel x) maka kita
gunakan tanda asterik di depan variabel pointer.
Seandainya pada program diatas tidak terdapat pernyataan :
px = &x;
Namun terdapat pernyataan :
y = *px;
maka, y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk variabel x. hal
seperti ini dapat menyebabkan komputer menjadi hang karena pointer belum di
inisialisasikan.
Satu hal lagi yang perlu diperhatikan lagi jika kita menggunakan pointer
ialah tipe variabel pointer dengan tipe data variabel yang ditunjuknya haruslah
sama contohnya pada program diatas variabel pointer px bertipe sama dengan
variabel yang ditunjuknya yaitu x, sama-sama bertipe integer.
Pointer dan Array
Hubungan antara pointer dan array pada C/C++ sangatlah erat, sebab
sesungguhnya array secara internal akan diterjemahkan dalam bentuk pointer.
Untuk jelasnya perhatikan program berikut ini :
#include
void main()
{ static int nilai[3] = {10,20,30 }; // pemberian nilai ke array nilai
int *pnilai; // mendeklarasikan variabel pointer pnilai
pnilai = nilai; // pnilai berisi alamat array
for(int i=0; i
Dari program diatas dapat dilihat bahwa pengaksesan elemen array dapat
dilakukan melalui alamat memori pada variabel pointer. *(pnilai + i) sama hal nya
dengan nilai[] pada array biasa. Output dari program diatas akan menghasilkan
nilai 10, 20 dan 30. untuk array dua, tiga dan n dimensi pun dapat kita buat dengan
menggunakan pointer. Contoh untuk array dengan dimensi dua pendeklarasiannya
adalah :
*(*(pnilai + i) + j)
Array dari pointer
Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai
contoh untuk membuat array satu dimensi yang bertipe integer kita seklarasikan :
int nilai[3] dirubah menjadi int *nilai
terdapat perbedaan diantara kedua statement diatas, pada array nilai[3] akan
menyebabkan tiga buah tempat untuk nilai-nilai integer atau sebanyak 6 byte
memori akan disiapkan untuk array ini (int = 2 byte dikali 3 tempat = 6 byte).
Untuk array pointer, kompiler tidak secara otomatis menyiapkan tempat untuk
nilai-nilainya, karena banyaknya nilai-nilai yang akan digunakan belum diketahui.
Untuk mengatasi masalah ini, maka untuk menyiapkan sejumlah blok memori
dapat digunakan cara alokasi dinamik (dynamic allocation). Cara alokasi dinamik
ini menggunakan memori yang masih kosong di luar memori yang biasanya
digunakan untuk data. Untuk menggunakan cara ini, perlu digunakan fungsi khusus
didalam pointer yaitu menggunakan fungsi standar malloc() dengan prototypenya
berada di header file stdlib.h. (ini hanya digunakan jika kita menggunakan bahasa
C), jika kita menggunakan bahasa C++ maka fungsi standar yang digunakan ialah
new. Contoh mengalokasikan suatu array dengan menggunakan fungsi-fungsi
diatas adalah sebagai berikut :
nilai = malloc(sizeof(int) * 3); // untuk mengalokasikan dengan C
nilai = new int // untuk mengalokasikan dengan C++
hasil dari pengalokasian diatas ialah suatu alamat yang menunjukkan byte pertama
dari memori yang dialokasikan di heap. Jika alokasi memori ini gagal, bisa
dikarenakan tidak mencukupinya memori pada heap, maka fungsi diatas akan
menghasilkan nilai NULL.
Setelah kita mengalokasikan memori untuk array, ada baiknya jika kita
menghapus / mende-alokasikan kembali array tersebut dari memori, sehingga
ruang di memori heap dapat digunakan untuk keperluan yang lainnya. Untuk
menghapus / mende-alokasikan sebuah array diperlukan sebuah fungsi standar
free() dari header file stdlib.h untuk para pengguna bahasa C, jika kita
menggunakan C++ kita menggunakan fungsi standar delete. Contohnya :
free(nilai); // mendealokasikan dengan bahasa C
delete [] nilai; // mendealokasikan dengan bahasa C++
selanjutnya pengalokasian diatas dapat dengan mudah kita membentuk suatu
struktur data link list maupun double link list dengan menggunakan bahasa C/C++.
Berikut ini akan diberikan contoh program dengan menggunakan fungsi
standar diatas (langsung dengan menggunakan C++) :
#include
#include
struct mhs
{
char npm[9];
char nama[25];
char alamat[30];
int nilai;
};
void main()
{
mhs *pmhs;
int n;
clrscr();
cout
cout
Dari program diatas dapat disimpulkan bahwa dengan menggunakan
pointer ke pointer, isi dari pointer yang terakhir merupaka alamat memori dari
variabel pointer sesungguhnya. Pada contoh diatas, variabel b yang menunjuk ke
variabel a ditunjuk kembali oleh variabel c sehingga nilai dari variabel c
sebenarnya sama dengan variabel b dan variabel a.
6.3 Laporan Pendahuluan
1. Pengertian Tree serta perbedaannya dengan Binary Tree.
2. Jelaskan istilah-istilah pada Tree : daun, root, level, tinggi dan derajad.
3. Sebutkan dan jelaskan jenis kunjungan yang terdapat pada binary tree.
4. Bagaimana kunjungan secara Preorder, Inorder dan Postorder dari tree yang
telah dibuat oleh PJ.
6.4 Materi Praktikum
1. Memberikan penjelasan secara teoritis mengenai pointer, terutama pengertian,
konsep dasar, cara pendeklariannya dalam bahasa C/C++.
2. Penjelasan cara menerapkan pointer untuk membentuk struktur yang dinamis,
melalui penggunaan fungsi-fungsi standar new dan delete.
3. memberikan contoh cara pembuatan array pointer dan pointer ke pointer.
4. Pemberian program-program sederhana pointer, diusahakan program yang
menggunakan alokasi dinamik atau jika bisa langsung penerapan link list /
double link list didalam program.
5. Nilai K (Keterampilan) didapat jika praktikan melengkapi program tentang
alokasi dinamik, seperti bagaimana cara menghapus sebuah variabel pointer
dari memory, dll.
6.5 Laporan Akhir
Buat Algoritma dari program yang dibuat sebelumnya (jika link list dapat lebih
baik). Program dapat dilengkapi dengan penggunaan pointer ke pointer atau dapat
juga menggunakan array pointer untuk yang dua dimensi.