Friday, February 24, 2017

Penjelasan pointer dan cara memahaminya-Blogmadioke

 

Pointer
Pointer adalah sebuah variabel yang isi datanya adalah alamat memori atau variabel lain. Sehingga pointer dapat juga disebut sebagai variabel alamat (address variable). 





deklarasi pointer
Untuk mendeklarasikan sebuah pointer, perintah dasarnya adalah :
Typedata *namavariabel; 
Untuk lebih jelasnya adalah :
int *pint;
float *pfloat;

 Pada contoh ke-1 kita mendeklarasikan sebuah pointer bernama pint yang menunjuk ke suatu alamat di memori yang menampung sebuah data bertipe integer. Contoh ke-2 mendeklarasikan sebuah variabel pointer bernama pfloat yang menunjuk ke suatu alamat yang menampung sebuah data bertipe float.

 Contoh jika saya punya kode seperti ini


#include <iostream>
using namespace std; 
main()
 {   
 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;
 } 

















 maka hasil runningnya seperti ini :
 

Kenapa nilai 1=20 dan nilai 2=10
begini penjelasan sederhananya :
kita lihat pengertian sederhananya bahwa pointer (*) dikatakan sebagai nilainya, dan tanda (&) sebagai penunjuk alamatnya.
  cout<<"\nNilai 1 = "<< a...
lihat pada listing, awalnya nilai a adalah 30, kemudian ada int *ubah; yang menandakan nilai dari (ubah)
ubah  = &a; , maka nilai ubah sama dengan menunjukkan nilai a (nilai a=30)
kemudian dibawahnya ada  *ubah = 20; (lihat listing)  maka nilai ubah =&a; menjadi 20 karena sudah diganti dengan *ubah = 20; setelahnya logikanya sama.

Pada pointer terdapat 3 jenis operator, yaitu operator penugasan, operator aritmatika, dan operator logika.  saya akan menjelaskan satu persatu

1. Operator penugasan
 Secara singkat Operator penugasan yaitu Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.

Misal 


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;










Maka hasil runningnya




penjelasan sederhananya :
p1 = &nilai; artinya nilai p1 alamat nilainya adalah variabel nilai (nilai=14.54)
p2=p1;  artinya p1 nilainya adalah p1

cout << "\n nilai p1 = “ << *p2 <<", p1 menunjuk alamat "<<p1;
*p2 menunjukkan nilai p2=p1 yang nilainya adalah 14.54 (lihat penjelasan sederhana di atas)
 ...", p1 menunjuk alamat "<<p1;
artinya p1 adlah alamat tipe data yaitu tipe data float dengan alamat  0x29fef4

2. Operator aritmatika
Operator aritmatika yaitu seperti, yaitu operasi penambahan dan pengurangan. Namun operasi ini hanya terbatas untuk tipe data integer saja.

Misal


#include <iostream>
using namespace std;
 main(){
int nilai[5], *penunjuk;
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;















Maka hasil runningnya seperti ini :

 Saya mempunyai 5 array,
 cout<<"\nNilai "<<*(penunjuk+1)..., menunjukkan pemberian nilai pada array kedua,kenapa bisa array kedua ?,karena awalnya ...Nilai "<<*penunjuk..maka ini adalah array pertama...yang kedua adalah..."<<*(penunjuk+1)....maka arraynya ditambah 1 jadi 0+1 maka akan pindah ke array 1. Kenapa tadi arraynya saya hitung dari satu ?karena array di mulai dari 1,dan penulisannya haris dari array 0.
<<" ada di alamat memori"<<penunjuk+1;  artinya menunjukkan alamat memori tipe data integer yang ke 2.

3. Operator logika
Pada pointer dapat digunakan operator logika, misal operator logika kurang dari (<),lebuh dari (>),lebih dari samadengan (>=) dan lain-lain;

misal

#include <iostream>
using namespace std;
main()
{
  int *pa, *pb, a = 100, b = 10; 
  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";
   }
}
  

















Maka hasil runningnya:

 pa = &a; pb = &b;  maka nilai pa=100, dan nilai pb=10
pada logika pertama  if (*pa < *pb) ,apakah nilai pa=100 lebih kecil dari nilai  pb=10 ?? Tidak maka logika ini tidak tepat.

else if (*pa == *pb) apakah pa=100 sama dengan pb=10 ?? Tentu tidak

maka pemilihan kondisi terakhir yang akan dijalankan 
yaitu
  else 
 {    cout<<"pa menunjuk ke memori lebih TINGGI dari pb\n";
  

Sekian penjelasan dan cara memahami pointer,Terimakasih telah mengunjunggi BlogMadioke

Semoga bermanfaat dan, pesan dari saya teruslah belajar dan pantang menyerah.  :)



silahkan share artikel ini jika bermanfaat







No comments:
Write comments