teknik informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/pointer.pdf · pointer •pointer...

of 26 /26
POINTER Tim Alpro Teknik Informatika

Author: duongdat

Post on 16-Aug-2019

234 views

Category:

Documents


0 download

Embed Size (px)

TRANSCRIPT

  • POINTER

    Tim Alpro

    Teknik Informatika

  • Pointer

    • Pointer adalah variable yang berisi alamatmemori sebagai nilainya.

    • Pointer salah satu keunggulan dari bahasa C.

    • Komputer mengalokasikan sebuah area padamemori ketika sebuah variabel dideklarasikan.

    • Area tersebut diacu dengan menggunakansebuah variabel dalam program, namun ketikaprogram di-compile dan berjalan, komputermengacu area tersebut dengan menggunakanalamat atau lokasi dari memori.

  • Contoh Variabel

    • Perhatikan contoh berikut:

    int angka = 50;

    • Dalam hal ini, area pada memoridialokasikan untuk menyimpan nilai integer. Memori tersebut dapat diakses denganmenggunakan nama angka.

  • Alamat

    • Komputer mengacu kepada area memoridengan menggunakan sebuah alamat.

    • Alamat rinci dari data yang disimpanbergantung kepada jenis komputer, sistemoperasi, dan compiler yang digunakan.

    • Jadi, meskipun nama variabel yangdigunakan adalah tetap (fixed), alamatdari variabel yang digunakan akanberbeda pada sistem yang berbeda.

  • Pointer & Alamat

    • Variabel yang dapat menyimpan alamat disebut‘pointer’, dan alamat yang disimpan dalampointer berisi nilai variabel lain

  • Karakteristik Pointer

    • Hal penting yang harus diketahui adalah, compilerharus tahu jenis dari data yang disimpan dalamvariabel yang diacu oleh pointer.

    • Sehingga dapat diketahui jumlah memori yangakan dialokasikan atau bagaimana cara untukmenangani isi dari memori yang diacu oleh pointer.

    • Sebuah pointer pada sebuah variabel charmengacu pada nilai dengan alokasi sebesar 1Byte,sedangkan sebuah pointer pada variabel intbiasanya mengalokasikan 4Byte.

  • Karakteristik Pointer

    • Setiap pointer akan dihubungkan denganjenis variabel tertentu, dan hanya bisadigunakan untuk mengacu jenis variabeltersebut.

    • Sehingga pointer berjenis ‘pointer to int’hanya dapat mengacu pada variabelberjenis int, dsb. Secara umum sebuahpointer dari type tertentu ditulis dengantype* untuk setiap nama type

  • Deklarasi Pointer

    • Bentuk umum deklarasi pointer:

    Tipe *Nama-variabel-pointer;

    – Tipe : tipe data pointer

    – Nama-variabel-pointer: nama variabel pointer

    – * : operator memori untuk mengembalikan nilaivariabel pada alamatnya

    • Contoh pointer sebuah variabel berjenis int :

    int *almt;

    • Variabel tersebut dapat menyimpan alamatdari variabel apapun yang berjenis int.

  • Inisialisasi Pointer

    • Pointer yang tidak diinisialisasi sangatlahberbahaya, lebih berbahaya dari variabelbiasa yang tidak diinisialisasi. Jadi, sebaiknyaselalu lakukan inisialisasi pointer ketikadideklarasikan. Kita dapat menginisialisasipointer almt sehingga tidak mengacukemanapun:

    int *almt = NULL;

  • Null Pointer

    • NULL adalah sebuah konstanta dalamstandard library dan setara dengan nilai 0untuk sebuah pointer.

    • NULL memastikan sebuah pointer tidakmengacu ke lokasi manapun dalammemori.

    • Hal tersebut dimaksudkan untukmenghindari penimpaan (overwriting)memori.

  • Operator

    • Bahasa C menyediakan 2 operator untuk operasipointer yaitu operator ‘*’ serta operator ‘&’.

    • Operator alamat atau address of ‘&’ digunakanuntuk mendapatkan alamat memori darioperandnya.

    &almt -> address

    • Operator unary ‘*’ digunakan untukmendapatkan nilai dari operandnya

    *almt -> value

  • Penggunaan Operator

    • Jika ingin menginisialisasi variabel almt denganalamat dari variabel yang telah dideklarasikan, kitadapat menggunakan operator address of ‘&’:

    int angka = 50;

    int *almt = &angka;

    • Nilai awal dari almt adalah alamat dari variabelangka.

    • Perlu diingat bahwa deklarasi dari angka harusdilakukan terlebih dahulu sebelum deklarasi daripointer yang akan digunakan untuk menyimpanalamat tersebut.

    int var = *almt;

    • Nilai var adalah 50.

  • Deklarasi Pointer dan Variabel

    • Tidak ada pendeklarasian khusus dari pointer. Kitadapat mendeklarasikan variabel biasa dan pointerdalam satu pernyataan:

    double nilai, *lokasi, abc;

    • Pernyataan tersebut mendeklarasikan dua variabeljenis double-precision floating-point yaitu nilaidan abc, dan sebuah variabel *lokasi yang

    berjenis pointer to double

  • Pointer VS Variabel

    • Perhatikan contoh lain berikut ini:

    int *p, q;

    • Pernyataan tersebut mendeklarasikan pointer pberjenis int*, dan sebuah variabel q yang berjenisint.

    • Kesalahan umum yang sering terjadi adalah denganmenganggap variabel p dan q adalah pointer

  • Contoh Deklarasi Pointer

    • Indirection operator * digunakan untuk mengaksesnilai dari variabel yang diacu oleh pointer.

    • Operator tersebut dikenal juga sebagai dereference operator karena digunakan untuk men-dereference sebuah pointer.

    • Perhatikan deklarasi variabel-variabel berikut:

    int angka = 20;

    int *pntr = &angka;

    int hasil = 0;

  • Mengakses Nilai Melalui Pointer

    • Variabel pntr menampung alamat dari variabel angka,

    sehingga kita dapat menggunakan ekspresi berikutuntuk menghitung nilai yang baru dari variabel hasil:

    hasil = *pntr + 5;

    • Ekspresi *pntr akan mengevaluasi nilai yang terdapat

    pada alamat di dalam pointer pntr.

    • Nilai yang tersimpan pada variabel angka adalah 20,sehingga nilai hasil akan menjadi 20 + 5 yaitu 25.

  • Latihan

    • Deklarasi var X, Y, Z, pointer Alamat_X dengantipe char

    • Nilai var X adalah J

    • Isikan nilai var X ke var Y

    • Mengisi pointer Alamat_X dengan alamatmemori var X

    • Mengisi nilai dalam pointer Alamat_X ke var Z

    • Tampilkan nilai var X, Y, Z

  • char *Alamat_X,X,Y,Z;

    X=’J’;

    Y = X;

    Alamat_X = &X;

    Z = *Alamat_X;

    printf(“Nilai variabel X adalah %c\n”, X);

    printf(“Nilai variabel Y adalah %c\n”, Y);

    printf(“Nilai variabel Z adalah %c\n”, Z);

  • Array & Pointer

    • Pointer pada array memerintahkan pointer agar menunjuk ke alamat yang telahdialokasikan oleh array tersebut.

    • Definisi pointer:int *P;

    • kemudian kita tunjuk ke alamat Array AP = &A[0];

    • P akan menunjuk alamat pertama Array

  • Array

    • Deklarasi arrayint A[10];

    • Kita memerintahkan compiler untukmenyediakan alamat memori sebesar

    10 * sizeof(int).

    • Bila ukuran int adalah 4 byte, makacompiler akan mengalokasikan sebesar 10 * 4 byte = 40 byte memori untuk A.

  • Malloc()

    • Fungsi untuk mengalokasikan memori

    • Prototipe void * malloc(size_n)

    • Fungsi malloc() akan mengembalikan pointer kesejumlah n byte ruang memory yang belumdiinisialisasi. Apabila tidak terpenuhi, maka fungsi iniakan mengembalikan nilai NULL.

    • Deklarasi

    int array[10];

    int *p;

    p = (int *) malloc(10 * sizeof(int));

  • Operasi Pointer - Assignment

    • Nilai suatu variabel pointer dapatdipindahkan ke variabel pointer yang lain

    • Contohfloat Y, *X1, *X2;

    Y = 12.34;

    X1 = &Y;

    X2 = X1; /*assignment variabel pointer*/

    printf(“Nilai variabel Y ada di alamat %p\n”, X1);

    printf(“Nilai variabel Y ada di alamat %p\n”, X2);

    Nilai variabel Y ada di alamat FFDANilai variabel Y ada di alamat FFDA

  • Operasi Pointer - Aritmatika

    • Suatu variabel pointer dapat ditambah ataudikurangi dengan suatu nilai integer

    • Operasi penambahan pointer dengan suatu nilaiinteger merupakan suatu peningkatan nilaipointer yang menunjukkan lokasi nilai data berikutnya (bukan byte berikutnya) di memori.

  • Operasi Pointer - Aritmatika

    • Contohint Nilai1,Nilai2,Nilai3, *Penunjuk;

    Nilai1 = 123;

    Nilai2 = 345;

    Nilai3 = 678;

    Penunjuk = &Nilai1;

    printf(“Nilai %d di alamat memori %p\n”, *Penunjuk, Penunjuk);

    printf(“Nilai %d di alamat memori %p\n”, *(Penunjuk+1),

    Penunjuk+1);

    printf(“Nilai %d di alamat memori %p\n”, *(Penunjuk+2),

    Penunjuk+2);

    Nilai 123 di alamat memori 1000Nilai 345 di alamat memori 1002Nilai 678 di alamat memori 1004

  • Operasi Pointer -Logika

    • Nilai suatu variabel pointer dapatdipindahkan ke variabel pointer yang lain

    • Contohint Nilai1=100,Nilai2=200, *PN1,*PN2,*PN3;

    PN1 = &Nilai1;

    PN2 = &Nilai2;

    PN3 = PN1;

    If(PN1PN2) printf(“PN1 menunjuk ke memori lebih rendah dari PN2\n”);

    If(PN1PN3) printf(“PN1 menunjuk ke memori lebih rendah dari PN3\n”);

  • TERIMAKASIH