Anda di halaman 1dari 66

1

TUI1E3– Algoritma dan Pemrograman

Pointer

TIM DOSEN

Teknik Fisika – Fakultas Teknik Elektro


MATERI PEMBELAJARAN
2

KONSEP POINTER

PARAMETER POINTER DAN FUNGSI


3

KONSEP POINTER

Pointer merupakan fitur andalan pada bahasa pemrograman C

Pointer mengalokasikan alamat memori secara dinamis

Meningkatkan peforma dari program yang dibuat


4
Memori Komputer

RAM (Random Access Memory)

Blok-blok lokasi dengan alamat bersifat unik

Bahasa C: 1 variabel  pesan ruang memori dari RAM


5

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

Ilustrasi penggunaan RAM


7
Apa itu Pointer?

• Pointer adalah sebuah variabel yang


berisikan alamat memori (bukan nilai).
• Pointer adalah suatu variabel penunjuk
ke alamat memori tertentu.
8
Apa itu Pointer?

• Pointer adalah sebuah variabel.


• Berisi sebuah alamat memori.
• Penunjuk pada suatu tipe data.
• Variabel Pointer juga harus memiliki
nama.
9
Deklarasi Pointer

Variabel Biasa

Memori Komputer Pointer

Kumpulan atau larik “Alamat khusus”


dari alamat memori yang telah dipesan
yang unik oleh compiler untuk
mencatat alamat
memori variabel lain
10
DEKLARASI POINTER
• Contoh :
unsigned int *my_pointer;

• Deklarasi di atas menyatakan deklarasi variabel


my_pointer yang bertipe pointer untuk variabel tipe
unsigned int (pointer to unsigned int)
• Variable my_pointer digunakan untuk menyimpan
suatu alamat memori suatu variabel bertipe
unsigned int
• Deklarasi suatu pointer diawali dengan tanda ‘*’
sebelum nama variabelnya
11
Deklarasi Pointer

P: Dapat ditempati
0x2004 oleh variabel
bertipe integer
12
Deklarasi Pointer
13
Mendapatkan Alamat dari Variabel

Bagaimana cara mendapatkan nilai dari variabel tersebut ?


14
Deference Pointer

Apa itu Deference Pointer ?


proses pengambilan nilai dari suatu alamat memori melalui pointer.
15
16
17
18
19
Easy Steps to Pointers
Step 1: Declare the variable to be pointed to.
Int num;
Char ch = ‘A’;
float x;

num:

ch: ‘A’

x:
20
Easy Steps to Pointers
Step 2: Declare the pointer variable.
int num;
char ch = ‘A’;
float x; numPtr:

int* numPtr = NULL; chPtr:


char *chPtr = NULL;
float * xPtr = NULL; xPtr:

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

int* numPtr = NULL; chPtr: addr of ch


char *chPtr = NULL;
float * xPtr = NULL; xPtr: addr of x
numPtr = #
chPtr = &ch;
xPtr = &x; num:

ch: ‘A’

A pointer’s type has to correspond to the type of the x:


variable it points to.
22
Easy Steps to Pointers
Step 4: De-reference the pointers.
Int num;
Char ch = ‘A’;
float x; numPtr: addr of num

int* numPtr = NULL; chPtr: addr of ch


char *chPtr = NULL;
float * xPtr = NULL; xPtr: addr of x
numPtr = #
chPtr = &ch;
xPtr = &x; num: 65

*xPtr = 0.25; ch: ‘A’


*numPtr = *chPtr;
x: 0.25
23
Void Pointer

Apa itu Void Pointer ?


Pointer yang dapat menunjuk ke alamat-alamat yang berisi variabel dari tipe
apapun  Pointer Tanpa Tipe
24
25
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 ‘&’.
26

Operator Alamat (&)

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”.
27

Operator Alamat (&)

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

Operator Alamat (&)


29

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”.
30

Operator Reference (*)

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

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
32

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
33
34

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.
35

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.
36
37

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;
}
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

Mengakses Isi Suatu Variabel Melalui


Pointer
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.
40

Mengakses Isi Suatu Variabel Melalui


Pointer

Jika 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.
41
42

Mengakses Isi Suatu Variabel Melalui


Pointer

Pada contoh sebelumnya, 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.
43

Mengakses Isi Suatu Variabel Melalui


Pointer
44

ARRAY SORT

Apa itu sorting ?


Pengurutan (sorting) adalah proses pengurutan data yang
sebelumnya disusun secara acak sehingga tersusun secara
teratur menurut aturan tertentu.
45

ARRAY SORT

2 urutan dalam proses sorting:


1. Ascending  mengurutkan dari data yang bernilai paling kecil
sampai paling besar
2. Descending  mengurutkan dari data yang bernilai paling besar
sampai paling kecil
46

ARRAY SORT

• Metode pengurutan pada array:


• Bubble Sort
• Insertion Sort
• Maximum-Minimum Sort
• Quick Sort
• Selection Sort
• Etc.
47
Bubble 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

• Menyimpan nilai maksimum ataupun nilai minimum ke bagian ujung array


(elemen pertama ataupun terakhir).
• Kemudian elemen tersebut akan ‘diikat’ dan tidak diikutkan lagi dalam
proses selanjutnya.
54
Maximum-Minimum Sort
55
Maximum-Minimum Sort
56
57
Selection Sort

• Ide dasar: melakukan beberapa kali pass untuk melakukan penyeleksian


elemen struktur data.
• Untuk ascending: elemen yang paling kecil di antara elemen-elemen yang
belum urut, disimpan indeksnya,kemudian dilakukan pertukaran nilai elemen
dengan indeks yang disimpan tersebut dengan elemen yang paling depan
yang belum urut.
• Untuk descending: elemen yang paling besar yang disimpan indeksnya
kemudian ditukar.
58
Selection Sort
59
Selection Sort
60
Selection Sort
61
Selection Sort
62
Selection Sort
63
Insertion 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

Anda mungkin juga menyukai