by : agus priyanto, m.kom st3 telkom purwokerto...

37
Structure and Pointer By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto www.st3telkom.ac.id

Upload: lydien

Post on 05-Sep-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Structure and Pointer

By : Agus Priyanto, M.KomST3 Telkom Purwokertowww.st3telkom.ac.id

Page 2: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

UDT (User Defined Type) Tipe Data Bentukan User

• Bahasa pemrograman bisa memiliki tipe data:– Built-in : sudah tersedia oleh bahasa

pemrograman tersebut• Tidak berorientasi pada persoalan yang dihadapi.

– UDT : User Defined Type, dibuat oleh pemrogram.• Mendekati penyelesaian persoalan yang dihadapi

– UDT : User Defined Type, dibuat oleh pemrogram.• Mendekati penyelesaian persoalan yang dihadapi• Contoh: record pada Pascal, struct pada C/C++, class

pada Java

– ADT : Abstract Data Type • memperluas konsep UDT dengan menambahkan

pengkapsulan atau enkapsulasi, berisi sifat­sifat dan operasi­operasi yang bisa dilakukan terhadap kelas tersebut.

• Contoh: class pada Java

Page 3: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Structure

Page 4: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Structureadalah kumpulan data yang saling

berhubungan, yang

satu unit disimpan dalam satu unit penyimpanan.

Page 5: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

data pegawai

nama,

alamat ,

gaji.

Page 6: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Bila menggunakan array biasa,

maka diperlukan tiga variable yang bebassatu dengan yang lain, yaitu variabel

nama, alamat dan gaji.

Dengan menggunakan structure, data

tersebut diorganisasikan dalam satukesatuan

* Dalam pascal, structure disebut record

Page 7: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

array vs structure

Page 8: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Deklarasi structure

struct data{

char name[20];char address[20];int salary;int salary;

};

data employee1;//Inisialisasi variabel structure

Page 9: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Masukan

int main()

{

cout << "Employee's name : ";

cin >> employee1.name;cin >> employee1.name;

cout << "Employee's address : ";

cin >> employee1.address;

cout << "Employee's salary : ";

cin >> employee1.salary;

Page 10: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Keluaran

cout << endl << "Employee's data : ";

cout << employee1.name << ", ";

cout << employee1.address << ", ";

cout << employee1.salary;

return 0;

}

Page 11: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Bagaimana jika data lebih dari 1?

int i;struct{

char nim[5];char nama[5];char nama[5];float nilai;

} mhs[5];

Page 12: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Pointer

Page 13: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat
Page 14: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Contoh kasus

Dideklarasikan array int data[5]

Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalahmaka langkah yang dilakukan adalahharus mengubah programnya danmengganti int data[5] menjadi intdata[10].

Page 15: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Cara lain untuk membuat program tersebut adalah dengan menggunakan

suatu variabel array yang dinamis dimana pemesanan tempatdinamis dimana pemesanan tempat

yang diperlukan untuk menyimpan data tidak dideklarasikan dalam program tapi

dilakukan secara runtime (ketika

program berjalan).

Page 16: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Pointer adalah built­in type di C dan C++,

dimana C++ mengambil konseppointer dari C.

sebenarnya sangat terkait dengan sebenarnya sangat terkait dengan

"Abstract C Machine", yaitu

model mesin abstrak dimana program C bekerja.

* pointer / penunjuk

Page 17: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Abstract C Machine adalah mesin abstrakdimana mesin tersebut memiliki prosesoruntuk menginterpretasikan stream of instruction, dan addressable memory

Page 18: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Addressable memory adalah

memory yang konten­nyadapat diambil jikadiketahui alamatnya. diketahui alamatnya.

Page 19: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Lebih jauh lagi, terdapat asumsibahwa konten memori dapat di ambil

dengan waktu konstan, tidak

nilai alamatpeduli berapa nilai alamat.

Page 20: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

• Hal ini disebut dengan Random Access Memory.

• Pointer (variabel penunjuk) juga seringdi defenisikan sebagai suatu

variabel yang berisivariabel yang berisialamat memori dari

suatu variabel lain.

Page 21: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Alamat ini merupakan lokasi dariobyek lain (biasanya variabel lain) didalam memori.

Contoh,

jika sebuah variabel berisialamat dari variabel lain, variabel pertama dikatakanmenunjuk ke variabel kedua.

Page 22: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

OperatorOperatorpointer

Page 23: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

& operator menghasilkan alamat

dari operand­nya Operator & merupakan operator alamat.

Pada saat pendeklarasian variable, user Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run­time.

Page 24: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , ampersand (&) didepan variable ,

yang berarti "address of". Contoh :

ted = &andy;

Page 25: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Penulisan tersebut berarti akan memberikan

variable ted alamat dari variable andy.

Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, pokok disini adalah alamat dalam memory,

bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb : andy = 25; fred = andy; ted = &andy;

Page 26: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat
Page 27: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

*

Menghasilkan nilai yang berbeda padasebuah alamat

Operator * merupakan operator reference.

Dengan menggunakan pointer, kita dapat Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan mem­berikan awalan operator asterisk (*) pada identifier pointer, yang ber­arti "value pointed by".

Page 28: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

contoh

beth = *ted;

(dapat dikatakan:"beth sama dengannilai yang ditunjuk oleh ted") beth = 25, nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilaiyang berada pada alamat 1776 adalah 25.

Page 29: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat
Page 30: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Pointer Bertipe Void

• Pada C++ terdapat pointer yang dapat menunjuk ke tipe data apapun, po­inter semacam ini dideklarasikandengan tipe void sehingga seringdengan tipe void sehingga sering

dikenal dengan istilah Void Pointer.

Page 31: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

void *p;int a=10;double b=23.4;char c='s';p=&a; //p menunjuk ke tipe data intcout<<"alamat (a=10) = "<<p<<endl;cout<<"alamat (a=10) = "<<p<<endl;p=&b; //p menunjuk ke tipe data doublecout<<"alamat (b=23.4) = "<<p<<endl;p=&c; //p menunjuk ke tipe data doublecout<<"alamat (c='s') = "<<p<<endl;

Page 32: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat
Page 33: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

Pointer aritmatika

Page 34: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

int a[5];

int *p;

a[0]=24;

a[1]=32;

a[2]=81;

a[3]=44;

a[4]=23;a[4]=23;

p=&a[0];

cout<<"alamat p : "<<p<<endl;

cout<<"nilai p : "<<*p<<endl;

p=p+3;

cout<<"alamat p : "<<p<<endl;

cout<<"nilai p : "<<*p<<endl;

Page 35: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat
Page 36: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat

bila menggunakan pointer dengancara yang salah maka akancara yang salah maka akan

menyebabkan sistemoperasi menjadirusak.

Page 37: By : Agus Priyanto, M.Kom ST3 Telkom Purwokerto …aguspri.dosen.st3telkom.ac.id/wp-content/uploads/sites/19/2016/03/... · Bilamenggunakanarray biasa, ... dinamisdimanapemesanantempat