Pointer
TIM DOSEN
KONSEP POINTER
KONSEP POINTER
RAM
Fungsi RAM:
Menyimpan instruksi-instruksi hasil kompilasi program
Menyimpan data-data variabel
Ketika suatu program di-compile, beberapa byte
memori dari RAM akan dialokasikan untuk
menyimpan instruksi dan menyimpan data
variabel
Alamat memori yang dialokasikan ditentukan
secara otomatis oleh compiler
6
Variabel Biasa
P: Dapat ditempati
0x2004 oleh variabel
bertipe integer
12
Deklarasi Pointer
13
Mendapatkan Alamat dari Variabel
num:
ch: ‘A’
x:
20
Easy Steps to Pointers
Step 2: Declare the pointer variable.
int num;
char ch = ‘A’;
float x; numPtr:
num:
ch: ‘A’
x:
21
Easy Steps to Pointers
Step 3: Assign address of variable to pointer.
Int num;
char ch = ‘A’;
float x; numPtr: addr of num
ch: ‘A’
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 :
Bahasa = 25;
Sejarah = bahasa;
Buku = &bahasa;
28
Contoh :
BhsC = *buku;
(dapat dikatakan bahwa BhsC sama dengan nilai
yang ditunjuk oleh buku). BhsC = 25, karena buku
di alamat 1776, dan nilai yang berada pada alamat
1776 adalah 25.
31
Deklarasi Pointer
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.
35
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.
36
37
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;
}
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.
38
39
ARRAY SORT
ARRAY SORT
ARRAY SORT
• Sebuah batu yang tenggelam di dalam air berat jenis batu lebih besar
daripada berat jenis air.
• Fenomena:
Zat yang lebih ringan akan dilempar ke atas (diapungkan)
Benda yang lebih berat akan dilempar ke bawah (ditenggelamkan)
• Melempar elemen array terkecil ke bagian ujung kiri array (sebagai elemen
pertama) melalui pertukaran antara elemen array.
48
Bubble Sort Ascending
49
Bubble Sort Ascending
50
Bubble Sort Ascending
51
52
Bubble Sort Ascending
53
Maximum-Minimum Sort
• Pada setiap Pass, tabel "terdiri dari" dua bagian : yang sudah terurut yaitu
[1..Pass – 1] dan sisanya [Pass..Nmax] yang belum terurut.
• Ambil elemen TabIntPass, sisipkan ke dalam TabInt[1..Pass-1] dengan tetap
menjaga keterurutan.
• Untuk menyisipkan TabIntPass ke TabInti, harus terjadi "pergeseran" elemen
tabel TabInt [I..Pass].
• Pergeseran ini dapat dilakukan sekaligus dengan pencarian I.
• Pencarian dapat dihentikan segera dengan memanfaatkan sifat keterurutan
TabInt[1..Pass].
• Metoda pengurutan ini cukup efisien (≅ N)terutama untuk N yang "kecil".
• Terdapat 2 varian : Tanpa Sentinel / Dengan Sentinel
64
Insertion Sort Ascending
65
Insertion Sort Sentinel Ascending
66
Insertion Sort Sentinel Ascending