Anda di halaman 1dari 28

Pointer dalam C++

PERTEMUAN MINGGU 2
TEKNIK KOMPUTER @2018
2
Apakah Pointer itu?

 Sebuah pointer adalah sebuah variabel yang


menyatakan alamat memori dari variabel lain yang
bertipe sama.
 Alamat memori ini adalah lokasi dari variabel-
variabel lain dimana variabel tersebut disimpan
dalam memori.
 Perbedaan utama antara variabel dan pointer
adalah :
 Pointer menyatakan alamat
 Variabel menyatakan nilai
 Pointer mendukung fungsi alokasi memori dinamis.
3
Sekilas tentang Memori

 Memori komputer terbagi menjadi lokasi memori


yang tersusun dari angka secara berurutan.
 Setiap variabel ditempatkan pada sebuah lokasi
unik dalam memori, disebut sebagai alamat.
4
Peta Memori C++

 Memori C++ terbagi menjadi empat bagian


seperti daftar dibawah ini:
 Program Code: menyimpan kode program
yang di-compile.
 Global Variables: tinggal dalam memori
sepanjang eksekusi program berlangsung.
 Stack: digunakan untuk menyimpan alamat
kembalian pada fungsi panggil, argumen
yang diberikan ke fungsi, variabel lokal untuk
fungsi. Stack juga menyimpan kondisi saat ini
dari CPU.
 Heap: adalah wilayah memori bebas dari
sebagian memori yang dialokasikan melalui
fungsi alokasi memori dinamis.
5
Free Store

 Free store adalah sekelompok memori


heap yang tidak teralokasi diberikan
ke program, dan dipergunakan oleh
program untuk alokasi memori dinamis
selama eksekusi.
6
Deklarasi dan Inisialisasi Pointer

 Syntax : Datatype *nama_variabel;


contoh: int *x; float *y; char *z;

 Address of operator(&) – sebuah operator tunggal


yang mengembalikan alamat memori dari
Operand. Operand adalah sebuah variabel normal.
contoh: int x = 10;
int *ptr = &x;
 Sekarang, ptr akan berisi alamat dimana variabel x
disimpan dalam memori.
7
Operator Dereference (*)

 Adalah sebuah operator tunggal yang


mengembalikan nilai tersimpan pada alamat
yang ditunjuk oleh pointer.
 Disini, Operand adalah sebuah variabel
pointer.
Contoh:
Int x = 10;
Int *ptr = &x;
cout << ptr; // address stored at ptr will be
displayed
cout << *ptr; // value pointed to by ptr will be
displayed
Sekarang ptr dapat digunakan untuk
mengubah/menampilkan nilai dari variabel x.
8
Pointer Arithmetic

 Dua operasi aritmatika, penjumlahan dan


pengurangan, juga memungkinkan untuk dilakukan
pada pointer. Ketika kita menambahkan 1 pada
sebuah pointer, kita pada dasarnya,
menambahkan ukuran tipe data dalam byte,
pointer menunjuk kesana.
Contoh : int *x; x++;
 Jika alamat sekarang dari x adalah 1000, maka
pernyataan x++ akan menambah x dengan 2
(ukuran tipe data int) dan membuatnya 1002,
bukan 1001.
9
Pointer Arithmetic (lanjutan)
10
Pointer dan Array

 C++ memperlakukan penamaan sebuah array


sebagai pointer konstan yang mengandung alamat
dasar, misalnya alamat dari alokasi pertama array.

contoh: int x[10];

 Disini, x adalah sebuah pointer konstan yang


mengandung alamat dasar dari array x
11
Pointer dan Array (Lanjutan)

 Kita juga dapat menyimpan alamat dasar dari array


dalam sebuah variabel pointer. Variabel pointer dapat
digunakan untuk mengakses elemen array, karena array
adalah sebuah blok dari lokasi memori yang sama secara
kontinu.

contoh:
int x[5];
Int *ptr = x; // ptr will contain the base address of x

 Kita dapat juga menuliskan


int *ptr = &x[0]; // ptr will contain the base address of x
12
Pointer dan Array (Lanjutan)

 Catatan: pada contoh sebelumnya


ptr++; // valid
x++; // invalid
 Ini terjadi karena x adalah sebuah pointer konstan
dan alamat yang disimpan di dalamnya tidak
dapat diubah. Tetapi ptr bukanlah sebuah pointer
konstan, sehingga pernyataan diatas akan
membuat ptr menunjuk ke elemen kedua dari
array.
 Isi dari array x dapat ditampilkan dengan cara sbb:
13
Pointer dan String

 Kita dapat menghandel array karakter menggunakan


pointer. Pertimbangkan program berikut ini:
void main()
{ char str[] = “komputer”;
char *cp=str;
cout<<str; // using variable name
cout << cp; // using pointer variable
}

 Disini cp menyimpan alamat dari str. Pernyataan cout


<< cp; akan mencetak “komputer” sebagai sebuah
alamat yang diberikan dari sebuah karakter dengan
cout menghasilkan cetakan segala sesuatu dari
karakter tersebut hingga karakter null pertama yang
mengikutinya.
14
Array dari Pointer

 Seperti array yang lain, kita juga dapat mempunyai


array dari pointer.
 Penggunaan umum dari array pointer adalah
sebuah array dari pointer ke string.
15
Array dari Pointer karakter

 Sebuah array dari pointer karakter digunakan untuk


menyimpan beberapa string dalam memori.
char * kendaraan[ ]={“CAR”,”VAN”,”BYCYCLE”,
”TRUCK”,”BUS”};
for(int i=0;i<5;i++)
cout<<kendaraan[i]<<endl;

 Pada contoh diatas, array kendaraan[] adalah sebuah


array dari pointer karakter. Sehingga kendaraan[0]
mengandung alamat dasar dari string “CAR”,
kendaraan[1] mengandung alamat dasar dari string
“VAN” dan seterusnya.
16
Pointer dan Konstanta

 Pointer konstan – artinya bahwa alamat


disimpan dalam pointer adalah konstan, misal:
alamat yang disimpan di dalamnya tidak
dapat diubah. Pointer tersebut akan selalu
menunjuk ke alamat yang sama. Nilai yang
disimpan pada alamat ini dapat diubah.
 Pointer ke sebuah kontanta – artinya bahwa
pointer menunjuk ke sebuah konstanta, misal:
alamat disimpan dalam pointer dapat diubah
tetapi pointer akan selalu menunjuk ke nilai
konstan.
17
Pointer dan Konstanta (lanjutan)

Contoh:
Kasus 1:
int x=10, y=20;
int * p1=&x; //non-const pointer to non-const int
*p1=20;//valid i.e. value can be changed
p1=&y; //valid i.e. address in p1 can be changed. Now it will
point to y.

Kasus 2:
const int x=10;
int y=20;
const int * p2=&x; // non-const pointer to const int
*p2=50; //invalid i.e. value can not be changed
p2=&y; // valid i.e. address stored can be changed
*p2=100;// invalid as p2 is pointing to a constant integer
18
Pointer dan Konstanta (lanjutan)

Kasus 3:
int x=10,y=20;
int * const p3= &x; //const pointer to non-const int
*p3=60; //valid i.e. value can be changed
p3=&y; //invalid as it is a constant pointer, thus
address can not be changed

Kasus 4:
int x=10,y=20;
const int * const p4=&x; // const pointer to const
int
p4=&y;// invalid
*p4=90;// invalid
19
Variabel Referensi

 Sebuah variabel referensi adalah sebuah nama yang


bertindak sebagai sebuah penamaan alias atau alternatif,
untuk sebuah variabel yang sudah ada.
 Syntax:
Data type &nama_variabel = variabel yang sudah
ada;
Contoh:
int num=10;
int &sum = num; // sum is a reference variable or alias
name for num
Catatan: num dan sum mengacu pada lokasi memori yang
sama. Perubahan yang dibuat terhadap sum juga akan
terjadi di num.
20
Penggunaan Variabel Referensi

 Metode ini membantu pengembalian


lebih dari satu nilai dari sebuah fungsi
kepada program pemanggil.
 Ketika bekerja dengan obyek yang
besar, argumentasi referensi
(reference arguments) mempercepat
program karena tidak perlu
memindahkan keseluruhan obyek, tapi
cukup referensi yang diperlukan untuk
dipindahkan.
21
Referensi sebagai Argumentasi Fungsi

 Pertimbangkan sebuah program:


void cube(int &x)
{ x= x*x*x; }

void main()
{ int y=10;
cout<<y<<endl;
cube(y);
cout<<y<<endl; }

 Program diatas, referensi y dipindahkan. Tidak ada memori


terpisah dialokasikan untuk x dan menggunakan memori
yang sama dengan y. Sehingga perubahan dibuat untuk x
juga akan terjadi di y.
22
Pengembalian oleh Referensi

 Sebuah fungsi dapat juga mengembalikan sebuah referensi. Pada kasus ini, fungsi
call dapat terlihat pada sisi kiri dari pernyataan penugasan. Seperti pada program
berikut ini:
void &cube(int &x)
{ x= x*x*x; return x;
}

void main()
{ int y=10, num=5;
cube(y) =num;
cout<<y<<endl;
cout<<num<<endl;}

 Pada pernyataan fungsi call, pertama kali fungsi call dievaluasi dan nilai dari x
dberubah menjadi 1000. Kemudian fungsi mengembalikan referensi dari x yang
tidak lain adalah y. Sehingga fungsi call menjadi sama dengan y = num. Sebagai
hasilnya, nilai y menjadi sama dengan 5.
23
Menggunakan Fungsi dengan
Melewatkan Pointer

 Ketika pointer dilewatkan ke fungsi, alamat


dari argumentasi sebenarnya pada fungsi
pemanggil dicopy menjadi argumentasi
formal dari fungsi yang dipanggil.
 Ini berarti, dalam fungsi yang dipanggil
apapun perubahan yang kita buat dalam
argumentasi formal, maka argumentasi
sebenarnya juga ikut berubah.
 Ini terjadi karena argumentasi formal
mengandung alamat argumentasi
sebenarnya dan menunjuk ke lokasi memori
dimana argumentasi sebenarnya disimpan.
24
Melewatkan dengan Pointer

 Perhatikan program swapping dua variabel dengan


bantuan pointer:
#include<iostream.h>

void swap(int *m, int *n)


{ int temp; temp = *m; *m = *n; *n = temp; }

void main()
{ int a = 5, b = 6;
cout << “\n Value of a :” << a << “ and b :” << b;
swap(&a, &b); //we are passing address of a and b
cout << “\n After swapping value of a :” << a <<
“and b :” << b;
}
25
Membandingkan Pass by Value, Pass
by Reference dan Pass by Pointer
26
Membandingkan Pass by Value, Pass
by Reference dan Pass by Pointer
27
Fungsi yang mengembalikan Pointer

 Bentuk umum dari prototipe sebuah fungsi yang


mengembalikan pointer adalah:
Data Type *nama_fungsi(daftar_argument);
Menemukan nilai minimum diantara dua nilai menggunakan
konsep pointer:
#include<iostream.h>
int *min(int &, int &)
{ if (x < y ) return (&x); else return (&y); }
void main()
{ int a, b, *c;
cout << “\nEnter a :”; cin >> a;
cout << “\nEnter b :”; cint >> b;
c = min(a, b);
cout << “\n The minimum no is :” << *c; }
28

Pertemuan berikutnya....

Memori Dinamis
(Dynamic Memory)

Anda mungkin juga menyukai