Anda di halaman 1dari 41

Tipe Data Pointer

Pointer
• Pointer (variabel penunjuk) adalah suatu variabel yang
berisi alamat memori dari objek (variabel) lain.

• Didefinisikan sebagai suatu variable yang menyimpan


alamat memori, beda dengan variable biasa yang
menyimpan sebuah nilai, pointer ini berisikan alamat
saja.

• Pointer adalah penunjuk suatu variable, karena


menunjuk suatu variable, maka pointer wajib memiliki
alamat dari variable yang ditunjuknya.
Kelebihan Pointer
• Variable pointer memiliki kelebihan disbanding variable
dengan tipe data lain. Kelebihannya adalah bersifat
dinamis.

• Variable ini dapat digunakan pada saat dibutuhkan saja,


setelah tidak digunakan, memori yang baru saja
digunakan dapat dibebaskan dan ditempati oleh
variable lain.
Array Vs Pointer
• Array dan pointer memiliki keterkaitan yang erat, Array
dikenal sebagai pointer yang tetap (fixed pointer) sedangkan
pointer sangat dinamis, artinya alamat yang dipegang oleh
sebuah pointer dapat berubah-ubah.

• Tipe dari pointer harus disesuaikan dengan tipe data yang


ditunjuk, untuk memperkirakan ukuran data yang ditunjuk
sehingga alokasi memori terjaga dengan baik.
Kegunaan Pointer
• Mengririmkan parameter berupa variable ke dalam
fungsi

• Untuk membuat variable dinamis

• Untuk menyimpan alamat memori dari sebuah variable (


data type atau objek dari class)
Kapan harus menggunakan
pointer?
• Pointer digunakan dalam program untuk mengakses dan
manipulasi data pada alamat tertentu.
• Pointer bias berguna untuk mentransfer data yang
memiliki kapasitas besar melalui suatu fungsi.
• Kadangkala dalam program yang besar,
penghematan memori wajib untuk dilakukan dengan
mekanisme pointer, suatu variable dalam suatu
fungsi dapat diakses oleh fungsi yang lain.
Kata Kunci Yang Perlu
diingat

Pointer Berisi alamat memori


DEKLARASI POINTER
Tipe data *nama_var_pointer

operator bintang/ asterisk (*)


char, float, int, double, long, dsb
Deklarasi Pointer
 Tipedata *nama_pointer;
Tipedata mendefinisikan tipe dari objek yg
ditunjuk oleh pointer.
Contoh:
 int *Px;
 char *sh;
Operator Pointer
• Operator pointer (ada 2):
1. Operator &
2. Operator *

• Referensi: adalah alias untuk variable lain.


• Pointer: memegang alamat memori dari sebuah variable.
Operator Pointer
• Operator Reference (*)
untuk mengakses nilai data operand/ variable pointer.
Bil1=*Bil2;
dibaca: bil1 sama dengan nilai yang ditunjuk oleh bil2

• Operator Dereference (&) / operator alamat

untuk mendapatkan alamat memori operand/ variable pointer.


Cth: Bil1 = &Bil2;

dibaca: isi variabel bil1 sama dengan alamat bil2


Contoh Implementasi
• Perhatikan gambar berikut:
Contoh Implementasi
Pada gambar ilustrasi ini, kita membuat tiga pointer
yakni *pointer_umur, *p_tinggi, dan *pointer2.

Pointer *pointer_umur dan *pointer2 menggunakan referensi
alamat memori 0001. Alamat memori ini merupakan alamat
memori dari variabel umur.

Lalu, si pointer p_tinggi menggunakan alamat memori dari


variabel tinggi.

Dengan begini..
Pointer akan bisa mengakses data yang tersimpan di dalam
alamat memori tersebut.
Mari kita lihat contoh berikut.
Contoh:
/Program :pointer1. cpp Hasil dari program:
#include <iostream.h> Nilai v = 7 dan *p = 7
#include<conio.h> Alamatnya = efffb24
using namespace std;
// cetak p dan *p
int main ( )
{
int v = 7, *p;
p = &v;
cout << "Nilai v = " << v << " dan *p = " <<
*p
<< " \nAlamatnya = " << p << 'n';
getch();
}
POINTER (cont)
Contoh program operator pointer : Penjelasan :
//Program :pointer2. cpp 1. Kondisi variabel num
#include <iostream.h> menunjukkan angka 50 dan
kondisi variabel pointer
using namespace std; ptr masih kosong
int main() 2. Variabel pointer ptr
{ menunjuk pada isi dari
variabel num sehingga
int *ptr, num; // 1 variabel pointer ptr isinya
ptr = &num; // 2 50
*ptr = 100; // 3 3. Variabel num berisi angka
cout << num << “ “; 100 sedangkan variabel
pointer ptr isinya tetap 50
(*ptr)++; // 4 4. Isi variabel num
cout << num << “ “; bertambah 1 dari 100
(*ptr)*2; // 5 menjadi 101
cout << (*ptr)*2 << "\n "; 5. Isi variabel num dari 101
cout << num << “\n “; menjadi 202. Hasil ini
diperoleh dari 101*2
return 0;
}
Bila dijalankan hasilnya adalah:
100 101 101
POINTER (cont)
Konstanta String Dan Pointer
Konstanta string terlihat dalam program teks dan
disimpan dalam tabel.

String

Contoh Program pointer string


//Program :pointer5. cpp
#include <iostream.h>
using namespace std;
int main()
{
char *s;
s = “Pointer mudah digunakan. \n”;
cout << s;
return 0;
}

Output :
Pointer mudah digunakan
POINTER (cont)
Pointer Dalam Pointer
C++ memperbolehkan penggunaan pointer dalam pointer
Yang masing-masing berisi data yang sama atau berbeda.

pointer variable

address value

Pointer tunggal

pointer pointer variable

address address value

Pointer dalam pointer


POINTER (cont)
Contoh :
char a;
char * b;
char ** c;
a = ‘z’ ;
b = &a;
c = &b;
Contoh program1
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
using namespace std;
int main()
{
int x, y; // x dan y bertipe int
int *px; // px pointer yang menunjuk objek
clrscr();
x = 87;
px = &x; // px berisi alamat dari x
y = *px; // y berisi nilai yang ditunjuk px
cout<<"Alamat x = "<< &x;
cout<<"\nIsi px = "<< px;
cout<<"\nIsi x = "<< x;
cout<<"\nNilai yang ditunjuk oleh px = "<< *px;
cout<<"\nNilai y = "<< y;
getch( );
}
Operasi Pointer
• Pada Pointer hanya bisa dilakukan 3
operasi:
1. Operasi Penugasan
2. Operasi Aritmatika
3. Operasi Logika

Pointer Aritmetika
Ada 4 operator aritmetika yang digunakan yaitu : ++, = =,
+ dan –
Contoh program yang dapat menampilkan 10 buah data
yang mempunyai alamat berbeda-beda:
POINTER (cont)

//Program :pointer3. cpp


#include <iostream.h> Output Program :
using namespace std; 0xeffffd9c 0xeffffd48
int main() 0xeffffda0 0xeffffd50
{ 0xeffffda4 0xeffffd58
int i [10], *i_ptr; 0xeffffda8 0xeffffd60
double f[10], *f_ptr; 0xeffffdac 0xeffffd68
int x; 0xeffffdb0 0xeffffd70
i_ptr = i; 0xeffffdb4 0xeffffd78
f_ptr = f; 0xeffffdb8 0xeffffd80
for(x=0; x<10; x++) 0xeffffdbc 0xeffffd88
cout << i_ptr+x << “ “ << f_ptr+x << “\n”; 0xeffffdc0 0xeffffd90
return 0;
}
OPERASI POINTER
1. Operasi penugasan
Nilai dari suatu variabel pointer
dapat disalin ke variabel pointer yang
lain.
contoh: y = 35;
x1= &y;
x2= x1;
Contoh Program2
#include <iostream.h>
#include <conio.h>

using namespace std;

int main() {
float *x1, *x2, y;
y = 13.45;
x1 = &y; /* Alamat dari y disalin ke variabel x1 */
x2 = x1; /* Isi variabel x1 disalin ke variabel x2 */
cout<<"Nilai variabel y = "<<y<<" ada di alamat "<<x1;
cout<<"\nNilai variabel y = "<<y<<" ada di alamat "<<x2;
getch();
}
POINTER (cont)
Pointer Perbandingan
Pointer dapat dibandingkan dengan Operator
hubungan seperti !=, ==,<, dan >.

//Program :pointer4. cpp


#include <iostream.h>
int main()
{
int num[10];
int *start, *end;
start = num;
end = &num[9];
while(start != end) {
cout << “Masukkan bilangan sebanyak 9 data : ”;
cin >> *start;
start++;
}
return 0;
}
OPERASI POINTER
2. Operasi aritmatika
– Suatu variabel pointer hanya dapat dilakukan operasi
aritmatika dengan nilai integer saja.

– Operasi yang biasa dilakukan adalah operasi penambahan


dan pengurangan.

– Operasi penambahan dengan suatu nilai menunjukkan


lokasi data berikutnya (index selanjutnya) dalam memori.
Begitu juga operasi pengurangan.
Contoh Program3
#include <iostream.h>
#include <conio.h>
using namespace std;
int main() {
int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
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;
getch();
}
Contoh Program4
3. Operasi Logika
#include <iostream.h>
#include <conio.h>
void main()
{ 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 if(*pa > *pb)
{cout<<"pa menunjuk ke memori lebih TINGGI dari
pb\n";}
getch(); }
ARRAY DAN POINTER
// more pointers
#include <iostream.h>
#include <conio.h>
int main ()
{
char array[5];
char * p;
p = array; *p = 'a';
p++; *p = 'b';
p = &array[2]; *p = 'c';
p = array + 3; *p = 'd';
p = array; *(p+4) = 'e';
for (int n=0; n<5; n++)
cout << array[n] << ", ";
getch();
}
29
POINTER (cont)
Array Pointer
Pointer dapat di-array seperti tipe data lain dalam C++ integer
contoh :
Int *pi[10];

Contoh Program array pointer


//Program :pointer6. cpp
#include <iostream.h>
int main()
{
Int numbers[5];
Int *p;
p = numbers; *p = 10;
p++; *p =20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout << numbers[n] << “, “;
return 0;
}

Output :
10, 20, 30, 40, 50,
POINTER DGN ARRAY
#include <iostream.h>
#include <conio.h>
void main(){
int tgl_lahir[] = { 13,9,1982 };
int *ptgl;
ptgl = tgl_lahir; /* ptgl berisi alamat array */
cout<<"Diakses dengan pointer\n";
cout<<"Tanggal = "<< *ptgl;
cout<<"\nBulan = "<< *(ptgl + 1);
cout<<"\nTahun = "<< *(ptgl + 2);
cout<<"\nDiakses dengan array biasa\n";
cout<<"Tanggal = "<< tgl_lahir[0];
cout<<"\nBulan = "<< tgl_lahir[1];
cout<<"\nTahun = "<< tgl_lahir[2];
getch();
}
31
PEMBERIAN NILAI ARRAY DGN
POINTER
//Contoh Program7
#include <iostream.h>
#include <conio.h>
void main(){
int x[5], *p, k;
clrscr();
p = x;
x[0] = 5;
x[1] = x[0]; /* x[1] diisi dengan x[0] sehingga x[1] = 5 */
x[2] = *p + 2; /* x[2] diisi dengan x[0] + 2 sehingga x[2] = 7 */
x[3] = *(p+1)-3; /* x[3] diisi dengan x[1] - 3 sehingga x[3] = 2 */
//x[4] = *(x + 2); /* x[4] diisi dengan x[2] sehingga x[4] = 7 */
x[4]=*(p+2)-1;
for(k=0; k<5; k++)
cout<<"\nx["<<k<<"] = "<< x[k];
getch();
}
Latihan 1: Buat inputan
scr dinamis
// more pointers // more pointers (Jawaban)
#include <iostream.h> #include <iostream.h>
#include <conio.h>
int main () #include <conio.h>
{ int main ()
char array[5]; {
char * p; char array[5];
p = array; *p = 'a';
char * p; p = array;
p++; *p = 'b';
p = &array[2]; *p = 'c'; for (int i=0;i<=4;i++)
p = array + 3; *p = 'd'; { cout<<"\nInput array["<<i<<"]=";cin>>*p;
p = array; *(p+4) = 'e'; p++;
for (int n=0; n<5; n++) }
cout << array[n] << ", ";
for (int n=0; n<5; n++)
getch();
} cout << array[n] << ", ";
getch();
}
Latihan 2: Berikan keterangan dan
outputnya

#include <iostream>
#include <conio>

const int ARRAY = 5;


int main ()
{
int Numbers [ARRAY] = {0, 100, 200, 300, 400};
const int *pInt = Numbers;
for (int nIndex = 0; nIndex < ARRAY; ++ nIndex)
cout << "Element [" << nIndex << "] = "<< *(pInt + nIndex) << endl;
getch();
}

34
Pointer dalam Pemrograman
Berorientasi Objek
Peubah Statis
• Nama peubah yang digunakan untuk mewakili suatu nilai data
sebenarnya merupakan suatu lokasi tertentu di memory
komputer. Pada saat sebuah program dikompilasi, compiler
akan melihat pada deklarasi peubah untuk mengetahui nama-
nama peubah apa saja yang akan digunakan sekaligus
mengalokasikan tempat dalam memory untuk menyimpan data
tersebut.
• Hal ini menunjukkan bahwa sebelum program dieksekusi,
lokasi-lokasi data dalam memory sudah ditentukan dan tidak
dapat diubah selama program tersebut dieksekusi. Perubah-
perubah jenis ini dinamakan peubah statis (static variable).
Peubah Dinamis (Pointer)
• Tipe data pointer dapat digunakan untuk pemrograman yang
membutuhkan pengalokasian memory yang bersifat dinamis.
Konsep pengalokasian memory secara dinamis sangat
berguna sehingga lokasi memory dapat digunakan seefisien
mungkin. Pemrograman dengan tipe data ini hanya akan
mengalokasikan memory saat program dieksekusi.
• Perubah dinamis (dynamic variable) berlaku sebaliknya, yaitu
lokasi memory hanya akan dialokasikan pada saat program
dieksekusi, sehingga ukuran memory yang digunakan akan
selalu berubah. Perubah dinamis diterapkan dengan
menggunakan tipe data pointer dan struktur data class.
Buatlah Program berikut.
#include <iostream> int main() {
#include <string> X* namaA = new X;
X* namaB = new X;
using namespace std; namaA->data = "Adi";
namaB->data = "Budi";
class X { cout << namaA->data << endl;
public: cout << namaB->data << endl;
string data; }; system("pause");
return 0;
}
Buatlah Program berikut.
#include <iostream> int main() {
#include <string> X* namaA = new X;
using namespace std; namaA->data = "Adi";
cout << "Nama A adalah : " << namaA->data << endl;
class X { X* namaB = new X;
public: X* namaC = new X;
string data; }; namaC->data = "Budi";
namaA->data = namaC->data;
namaB->data = namaC->data;
cout << "Nama A adalah : " << namaA->data << endl;
cout << "Nama B adalah : " << namaB->data << endl;
system("pause");
return 0;
}
Buatlah Program berikut.

#include <iostream> int main() {


#include <string> X* Anggota1 = new X;
using namespace std; X* Anggota2 = new X;
Anggota1->nama = "Andrian";
class X { Anggota1->alamat = "Bandung";
public: Anggota1->umur = 31;
string nama; Anggota2 = Anggota1;
string alamat; cout << Anggota2->nama << endl;
int umur; cout << Anggota2->alamat << endl;
}; cout << Anggota2->umur << endl;
system("pause");
return 0;
}
Terimakasih

Anda mungkin juga menyukai