MENGENAL POINTER
Pointer sesungguhnya berisi alamat dari suatu data, bukan data sebagaimana variabel biasa. Dengan kata lain pointer adalah variabel yang berisi alamat memori sebagai nilainya dan berbeda dengan variabel biasa yang berisi nilai tertentu.
0x0012ff88 Menunjuk ke variabel
0x0012ff88
pointer variabel
Mengetahui Alamat variabel
Alamat dari variabel dapat diketahui dengan menambahkan operator alamat berupa simbol & di depan nama variabel.
Contoh program :
#include <iostream.h> #include <conio.h>
void main() {
clrscr(); int a = 11; float b = 12.4; double c = 12.23456;
cout<<"Isi Variabel :"<<endl; cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl;
cout<<"\nAlamat Variabel :"<<endl; cout<<"a = "<<&a<<endl;
cout<<"b = "<<&b<<endl; cout<<"c = "<<&c<<endl; getch();
}
Output :
Isi Variabel : a = 11
b = 12.4 c = 12.2346
a = 0x0012ff88 b = 0x0012ff84 c = 0x0012ff7c
Mendefinisikan Variabel Pointer
Suatu variabel pointer didefinisikan dengan bentuk sebagai berikut :
- tipe_data dapat berupa sembarang tipe seperti halnya pada pendefinisian variabel bukan pointer.
- nama_variabel adalah nama variabel pointer
- * adalah operator memori yang fungsinya untuk mengembalikan nilai variabel pada alamatnya yang ditentukan oleh operand.
Supaya suatu variabel menunjuk ke variabel lain, mula-mula harus diisi dengan alamat dari variabel yang hendak ditunjuk.
Contoh program :
#include <iostream.h> #include <conio.h> void main()
{
int var_int = 55; // Variabel bukan pointer int *poin_int; // Variabel pointer clrscr();
poin_int = &var_int; // Pointer menunjuk ke vint cout << "Alamat var_int = " << &var_int << endl; cout << "poin_int = " << poin_int << endl;
getch(); }
Output :
Alamat var_int = 0x0012ff88 Poin_int = 0x0012ff88
Pada program diatas :
cout << "poin_int = " << poin_int << endl;
ternyata menampilkan isi pointer itu sendiri, bukan isi dari variabel vint.
Mengakses Nilai yang ditunjuk Pointer
Berdasarkan contoh program diatas, nilai dari var_int dapat diakses melalui poin_int setelah pernyataan : poin_int = &var_int
dijalankan. Caranya dengan melibatkan operator “tak langsung”. Operator ini berupa simbol “ * “ dan diletakkan di depan nama variabel pointer.Contoh
*poin_int
Contoh program :
#include <iostream.h> #include <conio.h>
void main() {
int var_int = 60; // Variabel bukan pointer int *poin_int; // Variabel pointer clrscr();
poin_int = &var_int; // Pointer menunjuk ke vint cout << " Nilai yang ditunjuk oleh pint = "
<< *poin_int << endl; getch();
}
Output:
Nilai yang ditunjuk oleh pint = 60
Pointer void
Untuk membuat pointer yang tidak bertipe yakni dengan meletakkan kata kunci void pada bagian penentu tipe pointer. Contoh :
void *ptr;
Merupakan pernyataan untuk mendefinisikan ptr sebagai variabel pointer void.
Suatu pointer void adalah pointer yang dapat menunjuk ke sembarang tipe data. Misalnya, Anda dapat mengatur agar pointer ini menunjuk ke tipe data int, tetapi di saat lain diperlukan untuk menunjuk data bertipe float.
Contoh program :
#include <iostream.h> #include <conio.h> void main()
{
clrscr();
void *ptr; // Pointer tak bertipe int vint = 45;
float vfl = 17.5;
ptr = &vint; // menunjuk ke int cout << "Nilai yang ditunjuk oleh ptr = " << *(int *)ptr << endl;
ptr = &vfl; // menunjuk ke float cout << "Nilai yang ditunjuk oleh ptr = " << *(float *) ptr << endl;
Output :
Nilai yang ditunjuk oleh ptr = 45
Nilai yang ditunjuk oleh ptr = 17.5
Dari program diatas bahwa variabel pointer ptr dapat menunjuk ke tipe int ataupun float.
Pointer dapat pula digabungkan dengan array, karena pada umumnya antara pointer dan array mempunyai kesamaan.
Contoh program :
#include <iostream.h> #include <conio.h> void main()
{
clrscr();
int tgl_lahir[] = {28, 11, 1982 }; int *poin_tgl;
poin_tgl = tgl_lahir; // ptgl menunjuk ke array cout << "Nilai yang ditunjuk poin_tgl : "
<< *poin_tgl << endl;
cout << "Nilai dari tgl_lahir[0] : " << tgl_lahir[0] << endl;
getch(); }
Output :
Nilai yang ditunjuk poin_tgl : 28
Nilai dari tgl_lahir[0] : 28
Setelah penugasan poin_tgl = tgl_lahir ptgl akan menunjuk ke elemen pertama (tgl_lahir[0]) dari array tgl_lahir.
Untuk mengakses semua tanggal dapat dilakukan dengan perintah :
for (int i=0;i<3;i++)
cout<<*(poin_tgl+i)<<endl;
Array Pointer
Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh :
merupakan pernyataan untuk mendefinisikan array namahari yang berisi 7 buah elemen berupa pointer. Pointer ini menunjuk ke data bertipe char.
Contoh program :
#include <iostream.h> #include <conio.h>
void main() {
clrscr();
char *namahari[] = {"Senin", "Selasa", "Rabu", "Kamis", "Jumat","Sabtu", "Minggu"};
for (int i = 0; i < 7; i++) cout << namahari[i] << endl; getch();
}
Output :
Senin
Selasa
Rabu
Kamis
Jumat
Sabtu
Minggu
Pointer Menunjuk Pointer
Suatu pointer bisa menunjuk ke pointer lain
ptr2 ptr1 Var_x
Untuk membentuk rantai seperti gambar diatas diperlukan pendefinisian sebagai berikut :
int var_x; //Variabel bertipe int
int *ptr1; //Variabel pointer yg menunjuk ke data bertipe int
int **ptr2; //Variabel pointer yg menunjuk ke pointer int
Agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa :
ptr1 = &var_x;
Sedangkan supaya ptr2 menunjuk ke ptr1, diperlukan perintah :
ptr2 = &ptr1;
Contoh :
#include <iostream.h> #include <conio.h> void main()
{
clrscr();
int var_x = 2345;
int *ptr1; //pointer ke variabel bukan pointer int **ptr2; //pointer ke pointer
cout << "var_x = " << var_x << endl; //penugasan alamat
ptr1 = &var_x; ptr2 = &ptr1;
//Mengakses nilai var_x melalui ptr1 cout << "*ptr1 = " << *ptr1 << endl; //Mengakses nilai var_x melalui ptr2 cout << "**ptr2 = " << **ptr2 << endl; getch();
}
Output :
var_x = 2345
*ptr1 = 2345
**ptr2 = 2345
Pointer Dan Fungsi
Pointer biasa digunakan di dalam argumen fungsi kalau nilai argumen dimasudkan untuk diubah di dalam fungsi.
Pointer Sebagai Argumen Fungsi
#include <iostream.h>#include <conio.h>
void ubah_nilai(int &x);
void main() {
clrscr();
int pinokio = 80;
<< pinokio << endl;
ubah_nilai(pinokio);
cout << "Nilai untuk pinokio sekarang : " << pinokio << endl;
getch(); }
//Definisi fungsi
void ubah_nilai(int &x) {
x = 95; }
Output :
dengan menuliskan & didepan argumen fungsi, nilai argumen dapat diubah didalam fungsi. hal serupa dapat diimplentasikan didalam pointer sebagai berikut :
#include <iostream.h> #include <conio.h>
void ubah_nilai(int *x);
void main() {
clrscr();
int pinokio = 80;
cout << "Nilai mula-mula untuk pinokio : " << pinokio << endl;
ubah_nilai(&pinokio);
cout << "Nilai untuk pinokio sekarang : " << pinokio << endl;
getch(); }
//Definisi fungsi
void ubah_nilai(int *x) {
*x = 95; }
Perbedaan :
Fungsi ubah_nilai() didefinisikan sebagai judul berupa void ubah_nilai(int *x)
Pada saat fungsi dipanggil argumen perlu ditulis dengan awalan & (&pinokio)
Prototipe fungsi disesuaikan dengan definisi fungsi : void ubah_nilai(int *x);
STRUKTUR
Struktur bermanfaat untuk mengelompokkan sejumlah data dengan tipe yang berlainan. Apabila
suatu struktur telah dideklarasikan, struktur ini dapat dgunakan untuk mendefinisikan suatu
variabel.
Suatu struktur juga dapat mengandung struktur yang lain dan anggota struktur dapat diakses menggunakan bentuk :
Varibel_struktur.nama_anggota
Contoh program lengkap yang melibatkan pendeklarasian dan pendefinisian variabel struktur dan juga pengaksesan terhadap anggota variabel struktur dapat dilihat dibawah ini :
#include <iostream.h> #include <conio.h> void main()
{
struct data_tanggal // Pendeklarasian {
int tahun; int bulan; int tanggal; };
data_tanggal tanggal_lahir; // Pendefinisian struktur // Pengaksesan anggota struktur
tanggal_lahir.tanggal = 28; tanggal_lahir.bulan = 11; tanggal_lahir.tahun = 1982;
cout << tanggal_lahir.tanggal << “ /”’ << tanggal_lahir.bulan << “/ “ << tanggal_lahir.tahun << endl; }
Hasil eksekusi :
Pada program diatas tanda titik diantara nama variabel dan nama anggota menyatakan penugasan untuk memberikan nilai 28 ke anggota tanggal pada variabel struktur tanggal_lahir.
Pemberian nilai terhadap suatu struktur dapat dilakukan dengan bentuk :
sepanjang kedua variabel adalah variabel struktur bertipe sama. Contoh program :
#include <iostream.h> #include <conio.h> void main()
{
struct data_tanggal // Pendeklarasian {
int tahun; int bulan; int tanggal; };
data_tanggal tgl1, tgl2 ; // Pendefinisian struktur // Penugasan per anggota
tgl1.tanggal = 28; tgl1.bulan = 11; tgl1.tahun = 1982;
// Penugasan antaranggota struktur tgl1 = tgl2;
cout << tgl2.tanggal << ‘ / ’
<< tgl2.bulan << ‘ / ’ << tgl2.tahun << endl; }
Hasil eksekusi :
Array struktur
Adalah array yang angota datanya berupa struktur Contoh:
#include <iostream.h> #include <conio.h>
void main() {
struct mahasiswa {
int nim;
char nama[30][1]; };
int jml;
mahasiswa mhs[25];
cout<<"Berapa jumlah siswa : "; cin>>jml;
for(int i = 0;i < jml; i++) {
cout<<"Nim : ";cin>>mhs[i].nim; cout<<"Nama : ";cin>>mhs[i].nama[i]; }
for(int i = 0;i < jml; i++) {
cout<<"Nim : "<<mhs[i].nim<<endl; cout<<"Nama : "<<mhs[i].nama[i]<<endl; }