ALGORITMA & STRUKTUR DATA - Pointer - ADT
PENYIMPANAN VARIABEL
Saat deklarasi variabel dalam sebuah program, kompiler menyediakan ruangan (space) sesuai besarnya tipe variable tersebut ‘a’ telah dialokasikan 2 bytes dari memory (cukup untuk int) dan alamat dasarnya (base address) dari ‘a’ adalah 0x03FE
OPERATOR &
Dalam contoh sebelumnya : Nilai a adalah 14,5, atau nilai int lainnya Nilai &a adalah 0x03FE
Operator & merupakan operator yang menghasilkan nilai balik berupa alamat sebuah variabel pada runtime.
POINTER
Address suatu variabel dapat disimpan dalam suatu tipe data tertentu yaitu pointer
Sama seperti variabel, pointer harus dideklarasikan sebelum digunakan. Format deklarasi pointer : tipe_data *nama_var Contoh : int *p_a; Artinya : p_a menyimpan suatu alamat yang memuat variabel bertipe integer
int menyatakan tipe data yang ditunjuk oleh p.
DEKLARASI POINTER
Saat pointer dideklarasikan, dia tidak menunjuk kemanapun. Anda harus membuatnya menunjuk ke sesuatu sebelum digunakan. Contoh :
seharusnya,
DEKLARASI POINTER
Pointer tidak dapat diisikan dengan beberapa hal berikut:
Konstanta, contoh :
*p=3;
Variabel register, krn tidak berada di memori Ekspresi,contoh :
*p= 3*7;
Pointer dapat diinisialisasi dengan address/alamat variabel atau dengan nilai NULL
CONTOH PENGGUNAAN POINTER
CONTOH PENGGUNAAN POINTER int a = 20, b, *p_1; p_1 = &a; b = *p_1 * 2; p_1 = &b; a = *p_1; printf(“a = %d”, a);
Output: a = 40
OPERASI PADA POINTER
Jenis operasi pada pointer Operasi assignment (penugasan) Operasi aritmatika
OPERASI ASSIGNMENT (PENUGASAN) POINTER int y = 5; /*deklarasi variabel y*/ int *yPtr; /*deklarasi variabel pointer yPtr*/ yPtr = &y; /*mengisi variabel pointer yPtr dengan alamat dari variabel y*/
OPERASI ARITMATIKA POINTER
Operasi penambahan dan pengurangan dengan bilangan bulat Operasi penambahan menunjukkan alamat data berikutnya sesuai ukuran tipe data yang ditunjuk pointer Operasi pengurangan menunjukkan alamat data sebelumnya sesuai ukuran tipe data yang ditunjuk pointer
OPERASI ARITMATIKA POINTER
OPERASI ARITMATIKA POINTER
POINTER & ARRAY
Elemen array dapat diakses dengan menggunakan indeks array
int my_array[20]; my_array[5] = 26; /* elemen ke-6 */ my_array[0] = 32; /* elemen ke-1 */
Nama array tanpa indeks adalah pointer konstan pada elemen pertama dari array
int *p_array; int my_array[20]; p_array = my_array; *p_array = 56; printf("%d\n",my_array[0]); my_array[0] = 30; printf("%d\n",*p_array);
POINTER & ARRAY
Cara mengakses elemen lain pada array dengan pointer? Saat array dideklarasikan, sejumlah memory secara kontinyu dialokasikan sesuai ukuran array Jika alamat elemen pertama (indeks 0) diassign pada pointer, maka dengan operasi aritmatika, elemen lain pada array dapat diakses
POINTER & ARRAY
POINTER
TO
POINTER
Selain menunjuk pada tipe data dasar (char, int, double, float, dll), pointer dapat juga digunakan untuk menunjuk pada tipe pointer
POINTER
TO
POINTER
POINTER
DAN
STRUCTURE
Dalam structure, pointer juga dapat dimasukkan sebagai salah satu elemen
Pointer juga dapat digunakan untuk menunjuk suatu variabel structure Akses elemen dari suatu pointer structure menggunakan arrow (->) operator
POINTER
DAN
STRUCTURE
PARAMETER FUNGSI
Secara garis besar, fungsi dapat menerima 2 jenis parameter Parameter by value Parameter by reference
Parameter by value Nilai variabel disalin ke local variabel fungsi. Hanya nilai variabel
Variabel di main tidak akan termodifikasi
Parameter by reference Alamat dari variabel dikirim ke fungsi
PARAMETER FUNGSI
BY
REFERENCE
Contoh Fungsi tukar_int menerima masukan 2 buah variabel integer, hasil akhir akan menukar nilai variabel satu sama lain.
Parameter by value only void tukar_int (int x, int y) { int temp; temp = x; x = y; y = temp; }
Jika fungsi tukar_int dipanggil dalam main function, nilai x dan y tidak akan tertukar.
PARAMETER FUNGSI
BY
REFERENCE
#include void tukar_int (int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } int main (void) { int a = 1, b = 20; /* lokal untuk main */ tukar_int (&a, &b); printf(“\na = %d, b = %d”, a, b); return (0); }
POINTER DAN MANAJEMEN DINAMIS
MEMORI
Alokasi memori yang dipelajari sampai saat ini hanya bersifat statik int a; -> alokasi memori untuk sebuah integer int a[10] -> alokasi memori untuk 10 buah integer
Alokasi memori statik Tidak dapat ditambah apabila dibutuhkan Tidak dapat dibebaskan saat sudah tidak dibutuhkan
Dengan pointer dan perintah : malloc() dan free(), dapat dilakukan manajemen memori secara dinamik Dapat ditambahkan apabila dibutuhkan Dapat dibebaskan saat sudah tidak dibutuhkan
POINTER DAN MANAJEMEN DINAMIS - MALLOC
MEMORI
Perintah malloc digunakan mengalokasikan ruang di memori pada saat dan jumlah tertentu saja
Saat dialokasi akan diperoleh ruang memori kontinyu -> mirip dengan array
Return value dari fungsi malloc adalah pointer ke elemen pertama dari memori yang telah dialokasikan
Perintah yang digunakan
(tipe_data*) malloc (jumlah_alokasi*sizeof(tipedata))
POINTER DAN MANAJEMEN DINAMIS - MALLOC
MEMORI
Contoh penggunaan malloc Untuk tipe data tunggal (int, float,char, dll) Untuk tipe data bentukan (struct)
Alokasi memori Untuk 3 char -> 3 byte
Alokasi memori Untuk 3 struct orang
POINTER DAN MANAJEMEN DINAMIS - FREE
MEMORI
Perintah free digunakan untuk membebaskan memori yang dialokasikan oleh fungsi malloc
Syntax perintah
free(nama_pointer)
Perlu diperhatikan bahwa free hanya dapat digunakan pada pointer menunjuk elemen pertama hasil alokasi perintah malloc
POINTER DAN MANAJEMEN DINAMIS - FREE
MEMORI
Contoh penggunaan free malloc
CONTOH ALOKASI MEMORI DINAMIS DENGAN MALLOC & FREE
TUGAS 2 Source tugas 1 diubah dengan spesifikasi berikut :
Array menjadi alokasi dinamis, jadi banyaknya data ditentukan oleh masukan dari user saat program dijalankan Setelah jumlah data ditentukan, user memasukkan data yang diinginkan Gunakan pointer, free dan malloc untuk merealisasikannya
Tugas dikumpulkan pada kuliah tanggal 28 April 2014. Yang dikumpulkan : a. Source program (file *.c) b. Aplikasi Program hasil kompilasi