10
Materi 1 Praktikum Algoritma Dan Struktur Data Laboratorium Komputer Dasar Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya POINTER & STRUCT 1. Dasar Teori A. Pointer Pengertian Pointer Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua. Pendeklarasian Variabel dan Pointer Dalam bahasa C / C++ terdapat format dalam deklarasi variabel. Format deklarasi variabel dalam bahasa C / C++ adalah sebagai berikut: Seperti halnya variabel lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan. Bentuk umum deklarasi pointer adalah : Setiap variabel yang dideklarasikan disimpan di dalam slot - slot memory yang memiliki nomor sendiri sendiri. Dengan pointer kita dapat mengetahui nomor nomor memory ini dan sekaligus memanipulasi isi dari variabel yang ―ditunjuk‖ oleh pointer ini. Agar suatu variabel pointer dapat menunjuk ke variabel lain, variabel pointer ini harus diisi dengan alamat dari variabel yang hendak ditunjuk. Sintaksis proses penunjukan pointer ke variabel lain adalah: tipe_data1 nama_variabel_biasa; tipe_data2 *nama_variabel_pointer; nama_variabel_pointer=&nama_variabel_biasa; tipe_data *nama_pointer tipe_data nama_variabel

Modul 1 ASD-Pointer

Embed Size (px)

DESCRIPTION

algoritma dan struktur data

Citation preview

Page 1: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

POINTER & STRUCT

1. Dasar Teori

A. Pointer

Pengertian Pointer

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat

memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek

lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel

berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke

variabel kedua.

Pendeklarasian Variabel dan Pointer

Dalam bahasa C / C++ terdapat format dalam deklarasi variabel.

Format deklarasi variabel dalam bahasa C / C++ adalah sebagai berikut:

Seperti halnya variabel lain, variabel pointer juga harus

dideklarasikan terlebih dahulu sebelum digunakan. Bentuk umum deklarasi

pointer adalah :

Setiap variabel yang dideklarasikan disimpan di dalam slot - slot

memory yang memiliki nomor sendiri – sendiri. Dengan pointer kita dapat

mengetahui nomor – nomor memory ini dan sekaligus memanipulasi isi

dari variabel yang ―ditunjuk‖ oleh pointer ini.

Agar suatu variabel pointer dapat menunjuk ke variabel lain,

variabel pointer ini harus diisi dengan alamat dari variabel yang hendak

ditunjuk. Sintaksis proses penunjukan pointer ke variabel lain adalah:

tipe_data1 nama_variabel_biasa;

tipe_data2 *nama_variabel_pointer;

nama_variabel_pointer=&nama_variabel_biasa;

tipe_data *nama_pointer

tipe_data nama_variabel

Page 2: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Pernyataan pertama merupakan deklarasi variabel biasa (yang

hendak ditunjuk oleh pointer) bernama nama_variabel_biasa dengan tipe

data tipe_data1. Pernyataan kedua merupakan deklarasi variabel pointer

bernama nama_variabel_pointer dengan tipe data tipe_data2. Sedangkan

pernyataan ketiga adalah pengisian variabel pointer

nama_variabel_pointer dengan alamat variabel nama_variabel_biasa

(yang hendak ditunjuknya).

Mengakses Variabel Dengan Pointer

Dalam bahasa C / C++ kita bisa mengakses variabel dengan dua cara

yaitu :

Secara langsung

Metode ini adalah metode paling dasar dan paling sering

digunakan sebagai cara yang umum untuk melakukan akses ke dalam

variabel. Akses ini berupa pemberian nilai atau pengembalian nilai

kembalian. Metode ini menjadi standar dalam deklarasi variabel di bahasa

C / C++. Syntax yang digunakan adalah :

tipe_data nama_variabel;

tipe_data nama_variabel = nilai variabel;

Secara tidak langsung dengan menggunakan pointer

Karena pointer adalah variabel yang menunjuk variabel lain, maka

kita dapat mengakses variabel lain dengan memanipulasi nilai yang

ruangan memory-nya ditunjuk oleh pointer tersebut. Dalam bahasan

pointer ada dua operator yang memegang kunci operasi pada pointer,

yaitu operator & dan operator *.

Operator &

Operator & merupakan operator alamat. Pada saat

pendeklarasian variabel, user tidak diharuskan menentukan lokasi

sesungguhnya pada memory, hal ini akan dilakukan secara otomatis

oleh kompiler dan operating sysem pada saat run-time. Jika ingin

mengetahui dimana suatu variable akan disimpan, dapat dilakukan

dengan memberikan tanda ampersand (&) didepan variable , yang

berarti "address of". Contoh : tif = &ub;

Page 3: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Penulisan tersebut berarti akan memberikan variable tif alamat

dari variable ub. Karena variabel ub diberi awalan karakter

ampersand (&), maka yang menjadi pokok disini adalah alamat

dalam memory, bukan isi variabel.

Operator *

Operator * merupakan operator reference. Dengan

menggunakan pointer, kita dapat mengakses nilai yang tersimpan

secara langsung dengan memberikan awalan operator asterisk (*)

pada identifier pointer, yang berarti "value pointed by". Contoh : tif

= *ub; Penulisan tersebut berarti nilai variabel tif sama dengan nilai

yang ditunjuk oleh variabel ub.

Kemudian dalam teknis penggunaan pointer, pengaksesan variabel

dilakukan dengan cara menggunakan kedua operator tersebut. Jika kita

ingin melihat alamat dari variabel yang ditunjuk kita gunakan operator &.

Sedangkan untuk mengetahui nilai variabel yang ditunjuk kita gunakan

operator *.

B. Struct

Definisi

Beberapa variabel (dapat berbeda tipe) yang dikelompokkan menjadi satu

dengan sebuah nama baru.

Penggunaan Struct

Struct digunakan untuk membuat tipe data baru.

Contoh:

struct motor {

float volts; //voltage of the motor

float amps; //amperage of the motor

int phases; //# of phases of the motor

float rpm; //rotational speed of motor

};

Page 4: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

typedef struct motor motor;

Cara Menggunakan Tipe Data Baru

motor p, q, r;

Mendefinisikan tiga variable – p, q, dan r – masing masing

bertipe data motor

motor M[25];

Mendeklarasikan array M berisi 25 data bertipe motor

motor *m;

Mendeklarasikan variabel pointer yang menyimpan alamat slot

memori yang berisi data bertipe motor

Cara Membuat Struct

Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah

sebagai berikut:

struct nama_tipe_struktur

{

tipe field1;

tipe field2;

...

...

tipe fieldn;

}

variabel_struktur;

Cara Mengakses Elemen Struct

Elemen dari struktur dapat diakses dengan menggunakan bentuk

variabel_struktur.nama_field antara variabel_struktur dan nama_field

dipisahkan dengan operator titik (disebut operator anggota struktur).

Contoh:

Deklarasi

motor p;

motor q[10];

Page 5: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Maka cara pengaksesannya:

p.volts — is the voltage

p.amps — is the amperage

p.phases — is the number of phases

p.rpm — is the rotational speed

q[i].volts — is the voltage of the ith motor

q[i].rpm — is the speed of the ith motor

C. Pointer pada Struct

Cara Memasukkan Alamat Struct ke Pointer

Seperti halnya pointer untuk variabel biasa yang menunjukkan alamat letak

dari nilai variabelnya, pointer untuk struktur juga menunjukkan alamat letak

dari variabel strukturnya. Pointer untuk struktur juga dideklarasikan secara

sama dengan variabel pointer biasa, yaitu dengan menggunakan asterisk di

muka nama variabel pointernya.

Berikut ini adalah contoh deklarasi variabel pointer untuk struktur ini:

struct

{

char Nama[5];

float IP;

}

Mahasiswa, *PM;

PM = &Mahasiswa;

Atau:

struct

{

char Nama[5];

float IP;

}

Page 6: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Mahasiswa, *PM = &Mahasiswa;

Cara Mengakses Elemen - Elemen Struct Via Pointer

Telah diketahui bahwa nilai-nilai elemen suatu struktur dapat

diakses dengan menggunakan operator titik (‗.‘). Selain dapat menggunakan

operator titik, untuk operasi pointer dapat juga digunakan operator ‗->‘ atau

operator ‗*‘ untuk mengakses elemen-elemen suatu struktur. Misalnya

untuk mengakses nilai elemen IP dari variabel struktur Mahasiswa dapat

dilakukan dengan menggunakan nama variabelnya atau dengan pointer

yang menunjuk ke nama variabelnya sebagai berikut:

nama_struct.nama_elemen

Contoh : Mahasiswa.IP

atau

nama_variabel_pointer->nama_elemen_struct (melalui pointer)

Contoh : PM->IP

atau

(*nama_variabel_pointer). nama_elemen_struct (melalui pointer)

Contoh : (*PM).IP

PM adalah pointer yang menunjuk ke alamat variabel Mahasiswa.

(*PM) menunjukkan nilai data di lokasi yang ditunjukkan oleh pointer PM,

yaitu nilai variabel struktur Mahasiswa.

(*PM).IP menunjukkan nilai elemen IP untuk variabel struktur

Mahasiswa.

Page 7: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

2. Uji Coba

Percobaan 1

Pointer

Ketiklah program di atas

1. Apa yang terjadi di memori komputer setelah bagian deklarasi variable

dieksekusi?

2. Jelaskan proses yang terjadi ketika baris 11 dieksekusi. Apa guna operator

&?

3. Jika data x dilambangkan dengan kotak dan pointer px dilambangkan titik,

ilustrasikan dengan gambar kondisi x dan px sebelum dan sesudah baris 11

dieksekusi

4. Jelaskan maksud baris 16

5. Ganti baris 8 dengan float *px. Jalankan program lalu amati apa yang

terjadi. Apa yang dapat anda simpulkan?

Page 8: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Percobaan 2

Passing by Value dan Passing by Reference

Ketiklah program di atas

1. Apa beda kode pada baris 14 dan 17?

2. Bagaimana cara mengakses isi variabel pointer?

3. Bagaimana cara mengakses data yang alamatnya disimpan oleh variabel

pointer?

4. Pindahkan baris 16 dan 17 ke baris 10. Compile ulang. Apa yang terjadi?

Mengapa?

5. Pindahkan baris 16 dan 17 ke baris antara baris 11 dan 12. Compile ulang.

Apa yang terjadi? Mengapa?

6. Jelaskan perbedaan penggunaan * pada bagian deklarasi variabel dan

bagian badan program!!!

Page 9: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Percobaan 3

Alokasi Memori Dinamis

Ketiklah program di atas

1. Apa guna dari baris 5 – 9?

2. Apa beda baris 21 – 22 dengan baris 25 – 26?

3. Jelaskan cara mengakses field sebuah struct menggunakan pointer!

4. Tambahkan kode sesudah baris 26 untuk mengubah nilai m.volts menjadi

30 dan m.amps menjadi 40. Kemudian tampilkan isi m.volts dan m.amps.

Akses dilakukan melalui pointer pm menggunakan operator ->

5. Tambahkan hal berikut pada program di atas

deklarasikan pm2 sebagai variabel pointer to motor

sesudah baris ke 26 salin nilai pm ke pm2

Tampilkan nilai m menggunakan pm2

ilustrasikan dengan gambar pm, pm2 dan m sebelum dan sesudah

penyalinan nilai

Page 10: Modul 1 ASD-Pointer

Materi 1

Praktikum Algoritma Dan Struktur Data

Laboratorium Komputer Dasar

Program Teknologi Informasi dan Ilmu Komputer Universitas Brawijaya

Percobaan 4

Alokasi Memori Dinamis

Ketiklah kode program di atas

1. Jelaskan baris 7 – 9. Apa beda ptr dan pptr

2. Jika pada bagian badan program terdapat

pptr

*pptr

**pptr

Jelaskan hasil keluarannya!

3. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 12 dan 13 dieksekusi

4. Berapa nilai i & j setelah baris 14 dieksekusi? Tampilkan dengan printf()

5. Berapa nilai i & j setelah baris 15 dieksekusi? Tampilkan dengan printf()

6. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 16 dieksekusi

7. Berapa nilai i & j setelah baris 17 dieksekusi? Tampilkan dengan printf()

8. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 17 dieksekusi