Pointer Tujuan : mahasiswa dapat mendefinisikan pointer mahasiswa dapat memahami operasi pada pointer mahasiswa dapat menerapkan pointer pada contoh kasus Pengertian Pointer merupakan variabel yang digunakan untuk menunjukkan suatu alamat memori komputer. Deklarasi Pointer dapat dinyatakan dalam C ++ menggunakan sintaks berikut: tipe_data *nama_pointer; Operator pointer: &nama_pointer menunjukkan alamat nama_pointer *nama_pointer menunjukkan nilai dari alamat nama_pointer Contoh 1 int a, b; a = 30; b = a - 5; int *ubah; ubah = &a; *ubah = 20; ubah = &b; *ubah = 10; cout<<"\nnilai 1 = "<< a <<" dan nilai 2 = "<< b; Jelaskan tentang sintaks yang terdapat pada Contoh 1!
Operasi pada Pointer Algoritma dan Struktur Data Pada pointer terdapat 3 jenis operator, yaitu operator penugasan, operator aritmatika, dan operator logika. a. Operator Penugasan Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain. Contoh 2 float nilai,*p1,*p2; nilai = 14.54; cout << "nilai = << nilai <<", alamatnya "<<&nilai; p1 = &nilai; p2 = p1; cout << "\n nilai p1 = << *p2 <<", p1 menunjuk alamat "<<p1; cout << "\n nilai p2 = << *p2 <<", p2 menunjuk alamat" <<p2; Buatlah contoh lain untuk Operator Penugasan dan jelaskan! b. Operator Aritmatika Pada pointer dapat dilakukan operasi aritmatika, yaitu operasi penambahan dan pengurangan. Namun operasi ini hanya terbatas untuk tipe data integer saja. Contoh 3 void int nilai[5], *penunjuk; clrscr(); nilai[0] = 125; nilai[1] = 345; nilai[2] = 750; nilai[3] = 800; nilai[4] = 900; penunjuk = &nilai[0]; cout<<"nilai "<<*penunjuk<<" ada di alamat memori "<<penunjuk; cout<<"\nnilai "<<*(penunjuk+1)<<" ada di alamat memori"<<penunjuk+1; cout<<"\nnilai "<<*(penunjuk+2)<<" ada di alamat memori"<<penunjuk+2; cout<<"\nnilai "<<*(penunjuk+3)<<" ada di alamat memori"<<penunjuk+3; cout<<"\nnilai "<<*(penunjuk+4)<<" ada di alamat memori"<<penunjuk+4; Buatlah contoh lain untuk Operator Aritmatika dan jelaskan!
c. Operator Logika Pada pointer dapat digunakan operator logika, yaitu if (pernyataan) perintah; else perintah; Contoh 4 void int *pa, *pb, a = 100, b = 10; clrscr(); pa = &a; pb = &b; if (*pa < *pb) cout<<"pa menunjuk ke memori lebih RENDAH dari pb\n"; else if (*pa == *pb) cout<<"pa menunjuk ke memori yang SAMA dengan pb\n"; else cout<<"pa menunjuk ke memori lebih TINGGI dari pb\n"; Buatlah contoh lain untuk Operator Logika dan jelaskan! Structure of Pointer Pointer dapat diakses dengan struktur. Variabel pointer dari struktur dapat dideklarasikan sebagai berikut. *nama_pointer;
Pengaksesan Struktur Elemen dari struktur melalui pointer dapat diakses dengan dua cara: a. Merujuk pointer ke alamat lain untuk mengakses memori Deklarasi untuk mengakses anggota stuktur melalui pointer dapat dilihat pada cara berikut. *nama_pointer, nama_objek; nama_pointer = &nama_objek; atau ; *nama_pointer, nama_objek; nama_pointer = &nama_objek; atau nama_objek; *nama_pointer =&nama_objek; Elemen pointer struktur dapat diakses menggunakan: (*nama_pointer).elemen atau nama_pointer -> elemen
Contoh 5 struct orang char nama[30],alamat[30]; int umur; ; struct orang *saya, s; saya = &s; cout << "Nama : "; cin >> saya->nama; cout << "Alamat : "; cin >> saya->alamat; cout << "Umur : "; cin >> saya->umur; cout << "=================================" <<endl; cout << saya->nama <<", Kota "<< saya->alamat <<", " << saya->umur <<" tahun"; Contoh 6 struct waktu int jam; int menit; ; struct rencana struct waktu *awal; struct waktu *akhir; ; struct waktu a; struct waktu b; struct rencana kerja = &a, &b; int kerja.awal->jam = 2; kerja.awal->menit= 30; kerja.akhir->jam = 3; kerja.akhir->menit = 45; cout<<"waktu Awal : "<<endl; cout<<kerja.awal->jam<<" jam "<<kerja.awal->menit<<" menit"<<endl; cout<<"waktu Akhir : "<<endl; cout<<kerja.akhir->jam<<" jam "<<kerja.akhir->menit<<" menit"<<endl;
b. Menggunakan alokasi memori dinamis Untuk mengakses elemen struktur menggunakan pointer, memori dapat dialokasikan secara dinamis menggunakan malloc() function yang terdefinisi di bawah header stdlib.h. Deklarasi untuk menggunakan malloc() nama_pointer = (cast-type*)malloc(byte-size) Contoh 7 #include <stdio.h> #include <stdlib.h> struct name int a; float b; char c[30]; ; int struct name *ptr; int i,n; printf("masukkan n: "); scanf("%d",&n); ptr=(struct name*)malloc(n*sizeof(struct name)); /* Above statement allocates the memory for n structures with pointer ptr pointing to base address */ for(i=0;i<n;++i) printf("masukkan masing-masing string, bilangan integer dan floating :\n"); scanf("%s%d%f",&(ptr+i)->c,&(ptr+i)->a,&(ptr+i)->b); printf("\ntampilkan informasi yang telah dimasukkan:\n"); for(i=0;i<n;++i) printf("%s\t%d\t%.2f\n",(ptr+i)->c,(ptr+i)->a,(ptr+i)->b); return 0;