[algoritma & struktur data] materi pointer
Embed Size (px)
DESCRIPTION
slide materi kuliah algoritma & struktur data mengenai pointerTRANSCRIPT
-
ALGORITMA &STRUKTUR DATA- Pointer
- ADT
-
PENYIMPANAN VARIABEL
Saat deklarasi variabel dalam sebuahprogram, kompiler menyediakan ruangan(space) sesuai besarnya tipe variable tersebut
a telaha telahdialokasikan 2 bytesdari memory (cukupuntuk int) dan alamatdasarnya (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 Operator & merupakan operator yang menghasilkan nilai balik berupa alamatsebuah variabel pada runtime.
-
POINTER
Address suatu variabel dapat disimpan dalamsuatu tipe data tertentu yaitu pointer
Sama seperti variabel, pointer harusdideklarasikan sebelum digunakan.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 tidakmenunjuk kemanapun. Anda harusmembuatnya menunjuk ke sesuatu sebelumdigunakan. Contoh :
seharusnya,
-
DEKLARASI POINTER
Pointer tidak dapat diisikan dengan beberapahal berikut:
Konstanta, contoh :
*p=3;
Variabel register, krn tidak berada di memori Variabel register, krn tidak berada di memori
Ekspresi,contoh :
*p= 3*7;
Pointer dapat diinisialisasi denganaddress/alamat variabel atau dengan nilaiNULL
-
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;
Output:
a = 40
a = *p_1;printf(a = %d, a);
-
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 yPtrdengan alamat dari variabel y*/dengan alamat dari variabel y*/
-
OPERASI ARITMATIKA POINTER
Operasi penambahan dan pengurangandengan bilangan bulat
Operasi penambahan menunjukkan alamat data berikutnya sesuai ukuran tipe data yang ditunjukpointer
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 menggunakanindeks 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 padaelemen 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 denganpointer?
Saat array dideklarasikan, sejumlah memory secara kontinyu dialokasikan sesuai ukuran array
Jika alamat elemen pertama (indeks 0) diassign Jika alamat elemen pertama (indeks 0) diassignpada 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 jugadigunakan untuk menunjuk pada tipe pointer
-
POINTER TO POINTER
-
POINTER DAN STRUCTURE
Dalam structure, pointer juga dapatdimasukkan sebagai salah satu elemen
Pointer juga dapat digunakan untukmenunjuk suatu variabel structuremenunjuk 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 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 variabelinteger, hasil akhir akan menukar nilai variabel satusama lain.
Parameter by value only
Jika fungsi tukar_int dipanggil dalam main function, nilai x dan y tidak akan tertukar.
void tukar_int (int x, int y){
int temp;temp = x;x = y;y = temp;
}
-
PARAMETER FUNGSI BY REFERENCE
#include void tukar_int (int *x, int *y){
int temp;temp = *x;*x = *y;*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 MEMORIDINAMIS
Alokasi memori yang dipelajari sampai saat inihanya bersifat statik int a; -> alokasi memori untuk sebuah integer
int a[10] -> alokasi memori untuk 10 buah integer
Alokasi memori statik Alokasi memori statik Tidak dapat ditambah apabila dibutuhkan
Tidak dapat dibebaskan saat sudah tidak dibutuhkan
Dengan pointer dan perintah : malloc() danfree(), dapat dilakukan manajemen memorisecara dinamik Dapat ditambahkan apabila dibutuhkan
Dapat dibebaskan saat sudah tidak dibutuhkan
-
POINTER DAN MANAJEMEN MEMORIDINAMIS - MALLOC
Perintah malloc digunakan mengalokasikan ruangdi memori pada saat dan jumlah tertentu saja
Saat dialokasi akan diperoleh ruang memorikontinyu -> mirip dengan arraykontinyu -> mirip dengan array
Return value dari fungsi malloc adalah pointer keelemen pertama dari memori yang telahdialokasikan
Perintah yang digunakan (tipe_data*) malloc (jumlah_alokasi*sizeof(tipedata))
-
POINTER DAN MANAJEMEN MEMORIDINAMIS - MALLOC
Contoh penggunaan malloc
Untuk tipe data tunggal (int, float,char, dll)
Untuk tipe data bentukan (struct)
Alokasi memoriUntuk 3 char -> 3 byte
Alokasi memoriUntuk 3 struct orang
-
POINTER DAN MANAJEMEN MEMORIDINAMIS - FREE
Perintah free digunakan untuk membebaskanmemori yang dialokasikan oleh fungsi malloc
Syntax perintah
free(nama_pointer) free(nama_pointer)
Perlu diperhatikan bahwa free hanya dapatdigunakan pada pointer menunjuk elemenpertama hasil alokasi perintah malloc
-
POINTER DAN MANAJEMEN MEMORIDINAMIS - FREE
Contoh penggunaan free malloc
-
CONTOH ALOKASI MEMORI DINAMISDENGAN MALLOC & FREE
-
TUGAS 2
Source tugas 1 diubah dengan spesifikasiberikut : Array menjadi alokasi dinamis, jadi banyaknya data
ditentukan oleh masukan dari user saat program dijalankan
Setelah jumlah data ditentukan, user memasukkandata yang diinginkandata yang diinginkan
Gunakan pointer, free dan malloc untukmerealisasikannya
Tugas dikumpulkan pada kuliah tanggal 28 April 2014. Yang dikumpulkan :
a. Source program (file *.c)
b. Aplikasi Program hasil kompilasi