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

26
POINTER Tim Alpro Teknik Informatika

Upload: duongdat

Post on 16-Aug-2019

243 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

POINTER

Tim Alpro

Teknik Informatika

Page 2: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 3: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 4: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 5: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

Pointer & Alamat

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

Page 6: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 7: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 8: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 9: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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;

Page 10: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 11: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 12: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 13: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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 nilai

dan abc, dan sebuah variabel *lokasi yang

berjenis pointer to double

Page 14: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 15: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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;

Page 16: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 17: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 18: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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);

Page 19: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 20: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 21: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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));

Page 22: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 23: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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.

Page 24: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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

Page 25: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

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(PN1<PN2) printf(“PN1 menunjuk ke memori lebih rendah dari PN2\n”);

If(PN1==PN2) printf(“PN1 menunjuk ke memori yg sama dengan PN2\n”);

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

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

If(PN1==PN3) printf(“PN1 menunjuk ke memori yg sama dengan PN3\n”);

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

Page 26: Teknik Informatika - dinus.ac.iddinus.ac.id/repository/docs/ajar/POINTER.pdf · Pointer •Pointer adalah variable yang berisi alamat memori sebagai nilainya. •Pointer salah satu

TERIMAKASIH