6
PERTEMUAN VI POINTER 6.1 Tujuan Praktikum Praktikan mengenal type data Pointer, mengerti tentang konsep dasar dari pointer, dapat mendeklarasikan pointer di Pascal serta dapat menggunakannya di dalam sebuah program. Mengerti tentang pembuatan array dengan menggunakan pointer, serta tahu cara mengalokasikan dan mende-alokasikan suatu variabel didalam sebuah program. 6.2 Teori Penunjang Pointer adalah suatu variabel yang menunjuk ke alamat memory variabel yang lainnya. Dengan menggunakan pointer banyak hal dapat dilakukan seperti melewatkan suatu variabel yang ada di dalam fungsi yang telah di bahas pada bab- bab sebelumnya. Suatu pointer bukan berisi dengan suatu nilai data seperti halnya pada variabel biasa, variabel pointer berisi dengan suatu alamat. Untuk mendeklarasikan variabel pointer kita menggunakan tanda asterik / bintang (*) didepan variabel yang di deklarasikan pada tipe data tertentu. Tanda ini juga dapat dipakai untuk mengakses nilai dari variabel yang telah ditunjuk. Untuk mendapatkan alamat dari variabel pointer kita menggunakan tanda &. Untuk lebih mengerti uraian diatas perhatikan ilustrasi berikut ini : #include <iostream.h> void main() { int *px, x, y; // mendeklarasikan variabel pointer px bertipe integer x = 1000; // memberikan nilai x sama dengan 1000 px = &x; // dengan statement ini variabel pointer sekarang menunjuk ke alamat variabel x y = *px; // mengakses variabel yang ditunjuk oleh pointer cout << px; // menampilkan isi dari variabel pointer px berupa alamat cout << endl; // ganti baris baru cout << y; // menampilkan isi dari variabel yang di tunjuk }

Pertemuan Vi-pointer

Embed Size (px)

DESCRIPTION

pointer

Citation preview

  • PERTEMUAN VI

    POINTER

    6.1 Tujuan Praktikum

    Praktikan mengenal type data Pointer, mengerti tentang konsep dasar dari

    pointer, dapat mendeklarasikan pointer di Pascal serta dapat menggunakannya di

    dalam sebuah program. Mengerti tentang pembuatan array dengan menggunakan

    pointer, serta tahu cara mengalokasikan dan mende-alokasikan suatu variabel

    didalam sebuah program.

    6.2 Teori Penunjang

    Pointer adalah suatu variabel yang menunjuk ke alamat memory variabel

    yang lainnya. Dengan menggunakan pointer banyak hal dapat dilakukan seperti

    melewatkan suatu variabel yang ada di dalam fungsi yang telah di bahas pada bab-

    bab sebelumnya.

    Suatu pointer bukan berisi dengan suatu nilai data seperti halnya pada

    variabel biasa, variabel pointer berisi dengan suatu alamat. Untuk mendeklarasikan

    variabel pointer kita menggunakan tanda asterik / bintang (*) didepan variabel yang

    di deklarasikan pada tipe data tertentu. Tanda ini juga dapat dipakai untuk

    mengakses nilai dari variabel yang telah ditunjuk. Untuk mendapatkan alamat dari

    variabel pointer kita menggunakan tanda &. Untuk lebih mengerti uraian diatas

    perhatikan ilustrasi berikut ini :

    #include

    void main()

    {

    int *px, x, y; // mendeklarasikan variabel pointer px bertipe integer

    x = 1000; // memberikan nilai x sama dengan 1000

    px = &x; // dengan statement ini variabel pointer sekarang menunjuk

    ke alamat variabel x

    y = *px; // mengakses variabel yang ditunjuk oleh pointer

    cout

  • Hasil dari program diatas adalah :

    FFDD

    1000

    Dari ilustrasi diatas dapat kita lihat bahwa px (yang merupakan variabel

    pointer) berisi alamat dari variabel x. Sedangkan jika kita hendak mengakses nilai

    dari variabel yang ditunjuk oleh variabel pointer (nilai dari variabel x) maka kita

    gunakan tanda asterik di depan variabel pointer.

    Seandainya pada program diatas tidak terdapat pernyataan :

    px = &x;

    Namun terdapat pernyataan :

    y = *px;

    maka, y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk variabel x. hal

    seperti ini dapat menyebabkan komputer menjadi hang karena pointer belum di

    inisialisasikan.

    Satu hal lagi yang perlu diperhatikan lagi jika kita menggunakan pointer

    ialah tipe variabel pointer dengan tipe data variabel yang ditunjuknya haruslah

    sama contohnya pada program diatas variabel pointer px bertipe sama dengan

    variabel yang ditunjuknya yaitu x, sama-sama bertipe integer.

    Pointer dan Array

    Hubungan antara pointer dan array pada C/C++ sangatlah erat, sebab

    sesungguhnya array secara internal akan diterjemahkan dalam bentuk pointer.

    Untuk jelasnya perhatikan program berikut ini :

    #include

    void main()

    { static int nilai[3] = {10,20,30 }; // pemberian nilai ke array nilai

    int *pnilai; // mendeklarasikan variabel pointer pnilai

    pnilai = nilai; // pnilai berisi alamat array

    for(int i=0; i

  • Dari program diatas dapat dilihat bahwa pengaksesan elemen array dapat

    dilakukan melalui alamat memori pada variabel pointer. *(pnilai + i) sama hal nya

    dengan nilai[] pada array biasa. Output dari program diatas akan menghasilkan

    nilai 10, 20 dan 30. untuk array dua, tiga dan n dimensi pun dapat kita buat dengan

    menggunakan pointer. Contoh untuk array dengan dimensi dua pendeklarasiannya

    adalah :

    *(*(pnilai + i) + j)

    Array dari pointer

    Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai

    contoh untuk membuat array satu dimensi yang bertipe integer kita seklarasikan :

    int nilai[3] dirubah menjadi int *nilai

    terdapat perbedaan diantara kedua statement diatas, pada array nilai[3] akan

    menyebabkan tiga buah tempat untuk nilai-nilai integer atau sebanyak 6 byte

    memori akan disiapkan untuk array ini (int = 2 byte dikali 3 tempat = 6 byte).

    Untuk array pointer, kompiler tidak secara otomatis menyiapkan tempat untuk

    nilai-nilainya, karena banyaknya nilai-nilai yang akan digunakan belum diketahui.

    Untuk mengatasi masalah ini, maka untuk menyiapkan sejumlah blok memori

    dapat digunakan cara alokasi dinamik (dynamic allocation). Cara alokasi dinamik

    ini menggunakan memori yang masih kosong di luar memori yang biasanya

    digunakan untuk data. Untuk menggunakan cara ini, perlu digunakan fungsi khusus

    didalam pointer yaitu menggunakan fungsi standar malloc() dengan prototypenya

    berada di header file stdlib.h. (ini hanya digunakan jika kita menggunakan bahasa

    C), jika kita menggunakan bahasa C++ maka fungsi standar yang digunakan ialah

    new. Contoh mengalokasikan suatu array dengan menggunakan fungsi-fungsi

    diatas adalah sebagai berikut :

    nilai = malloc(sizeof(int) * 3); // untuk mengalokasikan dengan C

    nilai = new int // untuk mengalokasikan dengan C++

    hasil dari pengalokasian diatas ialah suatu alamat yang menunjukkan byte pertama

    dari memori yang dialokasikan di heap. Jika alokasi memori ini gagal, bisa

    dikarenakan tidak mencukupinya memori pada heap, maka fungsi diatas akan

    menghasilkan nilai NULL.

  • Setelah kita mengalokasikan memori untuk array, ada baiknya jika kita

    menghapus / mende-alokasikan kembali array tersebut dari memori, sehingga

    ruang di memori heap dapat digunakan untuk keperluan yang lainnya. Untuk

    menghapus / mende-alokasikan sebuah array diperlukan sebuah fungsi standar

    free() dari header file stdlib.h untuk para pengguna bahasa C, jika kita

    menggunakan C++ kita menggunakan fungsi standar delete. Contohnya :

    free(nilai); // mendealokasikan dengan bahasa C

    delete [] nilai; // mendealokasikan dengan bahasa C++

    selanjutnya pengalokasian diatas dapat dengan mudah kita membentuk suatu

    struktur data link list maupun double link list dengan menggunakan bahasa C/C++.

    Berikut ini akan diberikan contoh program dengan menggunakan fungsi

    standar diatas (langsung dengan menggunakan C++) :

    #include

    #include

    struct mhs

    {

    char npm[9];

    char nama[25];

    char alamat[30];

    int nilai;

    };

    void main()

    {

    mhs *pmhs;

    int n;

    clrscr();

    cout

  • cout

  • Dari program diatas dapat disimpulkan bahwa dengan menggunakan

    pointer ke pointer, isi dari pointer yang terakhir merupaka alamat memori dari

    variabel pointer sesungguhnya. Pada contoh diatas, variabel b yang menunjuk ke

    variabel a ditunjuk kembali oleh variabel c sehingga nilai dari variabel c

    sebenarnya sama dengan variabel b dan variabel a.

    6.3 Laporan Pendahuluan

    1. Pengertian Tree serta perbedaannya dengan Binary Tree.

    2. Jelaskan istilah-istilah pada Tree : daun, root, level, tinggi dan derajad.

    3. Sebutkan dan jelaskan jenis kunjungan yang terdapat pada binary tree.

    4. Bagaimana kunjungan secara Preorder, Inorder dan Postorder dari tree yang

    telah dibuat oleh PJ.

    6.4 Materi Praktikum

    1. Memberikan penjelasan secara teoritis mengenai pointer, terutama pengertian,

    konsep dasar, cara pendeklariannya dalam bahasa C/C++.

    2. Penjelasan cara menerapkan pointer untuk membentuk struktur yang dinamis,

    melalui penggunaan fungsi-fungsi standar new dan delete.

    3. memberikan contoh cara pembuatan array pointer dan pointer ke pointer.

    4. Pemberian program-program sederhana pointer, diusahakan program yang

    menggunakan alokasi dinamik atau jika bisa langsung penerapan link list /

    double link list didalam program.

    5. Nilai K (Keterampilan) didapat jika praktikan melengkapi program tentang

    alokasi dinamik, seperti bagaimana cara menghapus sebuah variabel pointer

    dari memory, dll.

    6.5 Laporan Akhir

    Buat Algoritma dari program yang dibuat sebelumnya (jika link list dapat lebih

    baik). Program dapat dilengkapi dengan penggunaan pointer ke pointer atau dapat

    juga menggunakan array pointer untuk yang dua dimensi.