Transcript
  • 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


Top Related