by : agus priyanto, m.kom st3 telkom purwokerto www...
TRANSCRIPT
Structure and Pointer
By : Agus Priyanto, M.KomST3 Telkom Purwokertowww.st3telkom.ac.id
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 sifatsifat dan operasioperasi yang bisa dilakukan terhadap kelas tersebut.
• Contoh: class pada Java
Structure
Structureadalah kumpulan data yang saling
berhubungan, yang
satu unit disimpan dalam satu unit penyimpanan.
data pegawai
nama,
alamat ,
gaji.
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
array vs structure
Deklarasi structure
struct data{
char name[20];char address[20];int salary;int salary;
};
data employee1;//Inisialisasi variabel structure
Masukan
int main()
{
printf(“Employee's name : “);
scanf(employee1.name);scanf(employee1.name);
printf(“ Employee's address : ";
scanf(employee1.address);
printf(“ Employee's salary : ";
scanf(employee1.salary);
Keluaran
printf(“Employee's data : “);
printf(employee1.name);
printf(employee1.address);
printf(employee1.salary );printf(employee1.salary );
return 0;
}
Bagaimana jika data lebih dari 1?
int i;struct{
char nim[5];char nama[15];char nama[15];float nilai;
} mhs[5];
Pointer
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].
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).
Pointer adalah builtin type di C.
sebenarnya sangat terkait dengan
"Abstract C Machine", "Abstract C Machine", yaitu
model mesin abstrak dimana program C bekerja.
* pointer / penunjuk
Abstract C Machine adalah mesin abstrakdimana mesin tersebut memiliki prosesoruntuk menginterpretasikan stream of instruction, dan addressable memory
Addressable memory adalah
memory yang kontennyadapat diambil jikadiketahui alamatnya. diketahui alamatnya.
Lebih jauh lagi, terdapat asumsibahwa konten memori dapat di ambil
dengan waktu konstan, tidak
nilai alamatpeduli berapa nilai alamat.
• 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.
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.
OperatorOperatorpointer
& operator menghasilkan alamat
dari operandnya 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 runtime.
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;
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;
*
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 memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by".
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.
Pointer Bertipe Void
• Pada C terdapat pointer yang dapatmenunjuk ke tipe data apapun, pointer semacam ini dideklarasikandengan tipe void sehingga seringdengan tipe void sehingga sering
dikenal dengan istilah Void Pointer.
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;
Pointer aritmatika
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;
bila menggunakan pointer dengancara yang salah maka akancara yang salah maka akan
menyebabkan sistemoperasi menjadirusak.