SlideShare a Scribd company logo
1 of 21
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 44 dari 77
6. Pointer
Obyektif Praktikum :
• Mengerti konsep dasar apa itu pointer dan penggunaannya
• Mengerti apa itu Reference dan hubungannya dengan pointer
• Mengerti dan dapat menggunakan pointer pada C++
• Mengetahui hubungan antara pointer dan memory
Variabel merupakan suatu nilai yang disimpan dalam memory yang dapat diakses dengan
identifier. Variabel ini sesunggunhnya disimpan pada suatu alamat didalam memory. Dimana
setiap alamat memory akan berbeda dengan yang lainnya (unik).
Pengantar
Ketika suatu variable dideklarasikan , ada 3 hal yang dapat diassosiasikan yaitu: nama,
type data dan alamat pada memori. Contohnya deklarasi
Int n;
Berdasarkan pendeklarasian diatas, n adalah nama variable dengan type data integer yang
biasa ditulis Int ,dan alamat tempat alokasi memori untuk n akan disimpan
Dengan alamat memory dengan notasi hexadecimal seperti 0x8fd4fff4 yang dapat
digambarkan sbb :
0x8fd4fff4
n
int
kotak pada gambar mewakili tempat penyimpanan variabel yang berada di memory, nama
variabel berada disebelah kiri kotak, alamat variabel terdapat diatas kotak, dan jenis tipe
data berada dibawahnya sedangkan apabila diketahui nilai variabel tersebut maka akan
terdapat didalam kotak.
0x8fd4fff4
n
int
33
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 45 dari 77
suatu nilai variabel dapat diakses melalui nama variabelnya, sebagai contoh kita dapat
mengetahui nilai variabel dengan menuliskan statement cout << n;
dan untuk mengakses suatu alamat suatu variabel dapat digunakan operator alamat & ,
sebagai contoh kita dapat mengetahui alamat variable pada memori dengan statement cout
<< &n;
contoh program mencetak nilai pointer
#include <iostream.h>
#include <conio.h>
main()
{
int n = 33;
cout << "n = " << n << endl; // mencetak nilai n
cout << "&n = " << &n << endl; // mencetak alamat n
getch();
return 0;
}
Dengan output seperti :
n = 33
&n = 0x8fd4fff4
Dapat disimpulkan bahwa nama variabel menunjukkan nilai suatu variabel secara lagsung
sedangkan suatu pointer menunjukkan atau mengarahkan suatu nilai dengan tidak langsung
yaitu dengan cara mereferensikannya.
1. Reference
Suatu Reference atau referensi adalah suatu alias atau dapat dikatakan sebagai nama lain
sebagai petunjuk dari nama sebenarnya (sinonim). Reference dapat dideklarasikan
menggunakan sintaks :
Tipe& nama-ref = nama-var;
Dimana tipe& adalah tipe data, nama-ref adalah nama referensi, dan nama-var adalah nama
variabel. Sebagai contoh , pendeklarasian reference
int& rn=n; // rn adalah sinonim untuk n
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 46 dari 77
Contoh menggunakan Reference 1
#include <iostream.h>
#include <conio.h>
main()
{
int n = 33;
int& rn = n; // rn adalah reference untuk n
cout << "n = " << n << ", rn = " << rn << endl;
--n;
cout << "n = " << n << ", rn = " << rn << endl;
rn *= 2;
cout << "n = " << n << ", rn = " << rn << endl;
getch();
return 0;
}
Pada deklarasi r dan rn adalah nama berbeda untuk suatu variabel yang sama; r dan rn
memiliki nilai variabel yang sama. Seperti konstanta, reference harus diinisialisasi ketika
dideklarasikan dan diinisialisasikan dengan variable bukan literal.
int& rn=33; // ERROR: 33 is not a variable!
Ada beberapa compiler yang memperbolehkan pendeklarasian dengan literal, tetapi akan tetap
muncul warning mengenai temporary variable yang harus dibuat untuk mengalokasikan
memory yang dimana dapat dipanggil reference rn.
Meskipun reference harus diinisialisasikan pada variable, refernce bukan variable.
Variable adalah suatu objek
Reference adalah variable yang tidak terpisah karena akan mengarah pada satu nilai dan satu
alamat.
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 47 dari 77
Contoh menggunakan Reference 2
#include <iostream.h>
#include <conio.h>
main()
{
clrscr();
int n = 33;
int& rn=n; // r adalah sinonim untuk n
cout << "&n = " << &n << ", &rn = " << &rn << endl;
int& rn2=n; // r adalah sinonim yg lain utk n
int& rn3=rn; // r adalah sinonim lain utk n
cout << "&rn2 = " << &rn2 << ", &rn3 = " << &rn3 << endl;
getch();
return 0;
}
Output :
&n = 0x8fb8fff4, &rn = 0x8fb8fff4
&rn2 = 0x8fb8fff4, &rn3 = 0x8fb8fff4
Pada baris pertama output menunjukkan bahwa n dan rn memiliki alamat yang sama yaitu
0x8fb8fff4 dengan nama yang berbeda untuk satu objek. Sedangkan pada baris kedua
output menunjukkan bahwa reference tersebut mengarah atau mereferensi pada suatu objek,
pada program ini hanya terdapat satu objek yaitu yang terdapat pada alamat 0x8fb8fff4,
kesimpulannya reference rn, rn2, rn3 mengarah ke objek yang sama.
0x8fb8fff4
n
int
rn rn2 rn3
33
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 48 dari 77
pada C++, operator reference & digunakan untuk 2 tujuan yang khusus :
1. ketika diterapkan sebagai prefix atau awalan dari nama suatu objek
2. ketika diterapkan sebagai suffix atau akhiran pada suatu type T, yang menunjukkan
type yang “ mengarah ke T “, sebagai contoh, int& adalah type yang “mengarah ke
int”, pada contoh reference 2 n dideklarasikan mempunyai tipe data int, dan rn
dideklarasikan untuk memiliki type reference int.
C++ memiliki 5 type derived, ketika T adalah type maka
1. const T adalah type derived “ constant T ”
2. T() adalah type derived “ function returning T “
3. T[] adalah type derived “ array of T “
4. T& adalah type derived “ reference to T “
5. T* adalah type derived “ Pointer to T “
POINTER
Operator reference & mengembalikan alamat memory dari suatu variable ketika digunakan.
Kita juga dapat menyimpan suatu alamat pada suatu variable lain. Type dari variable yang
dapat menyimpan suatu alamat disebut Pointer. Variabel pointer harus mendapatkan type “
pointer to T “ , dimana T adalah type dari objek dimana pointer itu ditunjuk. Seperti yang
sudah dijelaskan pada akhir penjelasan reference bahwa “pointer to T” disimbolkan dengan
T* , sebagai contoh bahwa suatu alamat dari variable dengan tipe int dapat disimpan dalam
variabel pointer dengan tipe int*.
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 49 dari 77
Menggunakan pointer variabel
#include <iostream.h>
#include <conio.h>
main()
{
clrscr();
int n = 33;
cout << " n = " << n << ", &n = " << &n << endl;
int* pn=&n; // pn memegang alamat n
cout << " pn = " << pn << endl;
cout << " &pn = " << &pn << endl;
getch();
return 0;
}
Output :
n = 33, &n = 0x8fbafff4
pn = 0x8fbafff4
&pn = 0x8fbafff2
Dapat digambarkan sbb :
0x8fbafff4 0x8fbafff2
n pn
Int int*
Variabel n dideklarasi dengan angka 33 , dengan alamat 0x8fbafff4. variable pn dideklarasi
sama dengan &n yang merupakan alamat dari n, jadi nilai dari pn adalah 0x8fbafff4 , tetapi pn
adalah objek yang berbeda yang memiliki nilai alamat dari n , dikatakan berbeda karena pn
memiliki alamat berbeda yaitu 0x8fbafff2.
0x8fbafff433
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 50 dari 77
n
int
pn
int *
variabel pn disebut “pointer” karena bernilai “points” atau alamat dari lokasi nilai yang lain.
Nilai dari pointer tsb adalah suatu alamat. Alamat tersebut tergantung pada computer dimana
program itu berjalan. Dengan gambar diatas dapat pula dijelaskan bahwa 2 variable n dan pn
dimana pn adalah pointer dari n dan n memiliki nilai 33. pointer dapat dikatakan juga sebagai
“locator” : yang mengalokasikan objek lain melalui alamat.
Operator Alamat (Address operator (&))
Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya
pada memory, hal ini akan dilakukan secara otomatis oleh kompilerdan operating sysem pada
saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan
dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of".
Contoh:
ted = &andy;
Akan memberikan variable ted alamat dari variable andy, karena variable andy diberi awalan
karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory,
bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi
sbb :
andy = 25;
fred = andy;
ted = &andy;
Maka hasilnya:
33
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 51 dari 77
Operator Reference (*)
Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung
dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value
pointed by". Contoh :
beth = *ted;
(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted
dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.
Ekspresi dibawah ini semuanya benar, perhatikan :
andy == 25
&andy == 1776
ted == 1776
*ted == 25
Ekspresi pertama merupakan assignation bahwa andy=25;. Kedua, menggunakan operator
alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel
andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat
menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk
oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :
*ted == andy
Deklarasi variable bertipe pointer
Format deklarasi pointer :
type * pointer_name;
Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-nya. Contoh :
int * number;
char * character;
float * greatnumber;
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 52 dari 77
Contoh :
// my first pointer
#include <iostream.h>
int main ()
{ int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" << value1 << "/ value2==" << value2;
return 0;
}
Output :
value1==10 / value2==20
Perhatikan bagaimana nilai dari value1 dan value2 diubah secara tidak langsung. Pertama
mypointer diberikan alamat value1 dengan menggunakan tanda ampersand (&). Kemudian
memberikan nilai 10 ke nilai yang ditunjuk oleh mypointer, yaitu alamat dari value1, maka
secara tidak langsung value1 telah dimodifikasi. Begitu pula untuk value2.
Contoh :
// more pointers
#include <iostream.h>
int main ()
{
int value1 = 5, value2 = 15;
int *p1, *p2;
p1 = &value1; // p1 = address of value1
p2 = &value2; // p2 = address of value2
*p1 = 10; // value pointed by p1 = 10
*p2 = *p1; // value pointed by p2 = value pointed by p1
p1 = p2; // p1 = p2 (value of pointer copied)
*p1 = 20; // value pointed by p1 = 20
cout << "value1==" << value1 << "/ value2==" << value2;
return 0;
}
Output :
value1==10 / value2==20
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 53 dari 77
Array dan Pointer
Identifier suatu array equivalen dengan alamat dari elemen pertama, pointer equivalen
dengan alamat elemen pertama yang ditunjuk. Perhatikan deklarasi berikut:
int numbers [20];
int * p;
maka deklarasi dibawah ini juga benar :
p = numbers;
p dan numbers equivalen, dan memiliki sifat (properties) yang sama. Perbedaannya, user
dapat menentukan nilai lain untuk pointer p dimana numbers akan selalu menunjuk nilai
yang sama seperti yang telah didefinisikan. p, merupakan variable pointer, numbers adalah
constant pointer. Karena itu walaupun instruksi diatas benar, tetapi tidak untuk instruksi
dibawah ini :
numbers = p;
karena numbers adalah array (constant pointer), dan tidak ada nilai yang dapat diberikan
untuk identifier konstant (constant identifiers).
Contoh : Output :
// more pointers 10, 20, 30, 40, 50,
#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;
}
Inisialisasi Pointer
Contoh:
int number;
int *tommy = &number;
Equivalen dengan :
int number;
int *tommy;
tommy = &number;
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 54 dari 77
Seperti pada array, inisialisasi isi dari pointer dapat dilakukan dengan deklarasi seperti contoh
berikut :
char * terry = "hello";
Misalkan "hello" disimpan pada alamat 1702 dan seterusnya, maka deklarasi tadi dapat
digambarkan sbb :
terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter
tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!'
maka ekspresi yang digunakan ada 2 macam :
terry[4] = '!';
*(terry+4) = '!';
Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan :
Pointer Arithmatika
Contoh, char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4.
Terdapat 3 buah pointer :
char *mychar;
short *myshort;
long *mylong;
ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000,
sehingga jika dituliskan :
mychar++;
myshort++;
mylong++;
mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya
adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti
yang didefinisikan berupa ukuran dalam bytes.
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 55 dari 77
Perhatikan ekspresi dibawah ini :
*p++;
*p++ = *q++;
Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu
alamat yang ditunjuk, bukan nilai yang dikandungnya).
Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian
keduanya ditambahkan 1 atau dengan kata lain :
*p = *q;
p++;
q++;
void pointer
Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data
apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah
tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui,
sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void
pointer ketipe data sebenarnya.
Contoh :
// integer increaser
#include <iostream.h>
void increase (void* data, int type)
{
switch (type)
{
case sizeof(char) : (*((char*)data))++; break;
case sizeof(short): (*((short*)data))++; break;
case sizeof(long) : (*((long*)data))++; break;
}
}
int main ()
{
char a = 5;
short b = 9;
long c = 12;
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 56 dari 77
increase (&a,sizeof(a));
increase (&b,sizeof(b));
increase (&c,sizeof(c));
cout << (int) a << ", " << b << ", " << c;
return 0;
}
Output :
6, 10, 13
Pointer untuk functions
C++ memperbolehkan operasi dengan pointer pada function. Kegunaan yang utama adalah
untuk memberikan satu function sebagai parameter untuk function lainnya. Deklarasi pointer
untuk function sama seperti prototype function kecuali nama function dituliskan diantara
tanda kurung () dan operator asterisk (*) diberikan sebelum nama.
Contoh :
// pointer to functions
#include <iostream.h>
int addition (int a, int b)
{ return (a+b); }
int subtraction (int a, int b)
{ return (a-b); }
int (*minus)(int,int) = subtraction;
int operation (int x, int y, int (*functocall)(int,int))
{
int g;
g = (*functocall)(x,y);
return (g);
}
int main ()
{
int m,n;
m = operation (7, 5, addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}
Output :
8
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 57 dari 77
Dari contoh diatas, minus merupakan pointer global untuk function yang mempunyai 2
parameters bertipe int, kemudian diberikan untuk menunjuk function subtraction, ditulis
dalam satu baris instruksi :
int (* minus)(int,int) = subtraction;
Structures
Data structures
Struktur data merupakan kumpulan berbagai tipe data yang memiliki ukuran yang berbeda di
kelompokan dalam satu deklarasi unik, dengan format sbb :
struct model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
dimana model_name adalah nama untuk model tipe stukturnya dan parameter optional
object_name merupakan identifier yang valid untuk objek sturktur. Diantara kurung kurawal
{ } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jika
pendefinisian stuktur menyertakan parameter model_name (optional), maka parameter
tersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh :
struct products {
char name [30];
float price;
} ;
products apple;
products orange, melon;
Didefinisikan model struktur products dengan dua field : name dan price, dengan
tipe yang berbeda. Kemudian tipe struktur tadi (products) digunakan untuk mendeklarasikan
tiga objek : apple, orange dan melon.
Ketika dideklarasikan, products menjadi tnama tipe yang valid seperti tipe dasar int,
char atau short dan dapat mendeklarasikan objects (variables) dari tipe tersebut. Optional
field yaitu object_name dapat dituliskan pada akhir deklarasi struktur untuk secara langsung
mendeklarasikan object dari tipe struktur. Contoh :
struct products {
char name [30];
float price;
} apple, orange, melon;
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 58 dari 77
Sangat penting untuk membedakan antara structure model, dan structure object. model adalah
type, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satu
model (type).
Contoh :
// example about structures
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
struct movies_t {
char title [50];
int year;
} mine, yours;
void printmovie (movies_t movie);
int main ()
{
char buffer [50];
strcpy (mine.title, "2001 A Space Odyssey");
mine.year = 1968;
cout << "Enter title: ";
cin.getline (yours.title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
yours.year = atoi (buffer);
cout << "My favourite movie is:n ";
printmovie (mine);
cout << "And yours:n ";
printmovie (yours);
return 0;
}
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")n";
}
Output :
Enter title: Alien
Enter year: 1979
My favourite movie is:
2001 A Space Odyssey (1968)
And yours:
Alien (1979)
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 59 dari 77
Contoh diatas menjelaskan bagaimana menggunakan elemen dari struktur dan struktur itu
sendiri sebagai variable normal. Contoh, yours.year merupakan variable valid dengan tipe
int, dan mine.title merupakan array valid dari 50 chars.
Perhatikan mine dan yours juga berlaku sebagai valid variable dari tipe movies_t ketika di-
pass ke-function printmovie(). Salah satu keuntungan dari structures yaitu kita dapat
mengacu pada setiap elemennya atau keseluruhan blok struktur.
Contoh :
// array of structures
#include <iostream.h>
#include <stdlib.h>
#define N_MOVIES 5
struct movies_t {
char title [50];
int year;
} films [N_MOVIES];
void printmovie (movies_t movie);
int main ()
{
char buffer [50];
int n;
for (n=0; n<N_MOVIES; n++)
{
cout << "Enter title: ";
cin.getline (films[n].title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
films[n].year = atoi (buffer);
}
cout << "nYou have entered these movies:n";
for (n=0; n<N_MOVIES; n++)
printmovie (films[n]);
return 0;
}
void printmovie (movies_t movie)
{
cout << movie.title;
cout << " (" << movie.year << ")n";
}
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 60 dari 77
Output :
Enter title: Alien
Enter year: 1979
Enter title: Blade Runner
Enter year: 1982
Enter title: Matrix
Enter year: 1999
Enter title: Rear Window
Enter year: 1954
Enter title: Taxi Driver
Enter year: 1975
You have entered these movies:
Alien (1979)
Blade Runner (1982)
Matrix (1999)
Rear Window (1954)
Taxi Driver (1975)
Pointer to structure
Sama seperti pada tipe lainnya, struktur juga dapat ditunjuk oleh pointer. Aturannya sama
untuk setiap tipe data. Pointer harus dideklarasikan sebagai pointer untuk struktur :
struct movies_t {
char title [50];
int year;
};
movies_t amovie;
movies_t * pmovie;
amovie merupakan object dari tipe struct movies_t dan pmovie adalah pointer untuk
menunjuk ke objek dari tipe struct movies_t. maka, deklarasi dibawah ini juga benar :
pmovie = &amovie;
Contoh :
// pointers to structures
#include <iostream.h>
#include <stdlib.h>
struct movies_t {
char title [50];
int year;
};
int main ()
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 61 dari 77
{
char buffer[50];
movies_t amovie;
movies_t * pmovie;
pmovie = & amovie;
cout << "Enter title: ";
cin.getline (pmovie->title,50);
cout << "Enter year: ";
cin.getline (buffer,50);
pmovie->year = atoi (buffer);
cout << "nYou have entered:n";
cout << pmovie->title;
cout << " (" << pmovie->year << ")n";
return 0;
}
Output :
Enter title: Matrix
Enter year: 1999
You have entered:
Matrix (1999)
Operator -> merupakan operator penunjuk yang digunakan secara khusus bersama dengan
pointer untuk struktur dan pointer untuk class. Memungkinkan kita untuk tidak menggunakan
tanda kurung pada setiap anggota struktur yang ditunjuk. Dalam contoh digunakan :
pmovie->title
Atau dalam penulisan yang lain :
(*pmovie).title
Kedua ekspresi tersebut diatas : pmovie->title dan (*pmovie).title benar dan berarti
evaluasi elemen title dari struktur yang ditunjuk (pointed by) pmovie. Harus dibedakan dari :
*pmovie.title
Yang ekuivalen dengan :
*(pmovie.title)
Dibawah ini merupaka tabel rangkuman, kombinasi yang mungkin terjadi antara pointer dan
struktur :
Expression Description Equivalent
pmovie.title Element title of structure pmovie
pmovie->title Element title of structure pointed by pmovie (*pmovie).title
*pmovie.title Value pointed by element title of structure pmovie *(pmovie.title)
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 62 dari 77
Nesting structures
Struture juga dapat berbentuk nested (bersarang) sehingga suatu elemen dari suatu struktur
dapat menjadi elemen pada struktur yang lain :
struct movies_t {
char title [50];
int year;
}
struct friends_t {
char name [50];
char email [50];
movies_t favourite_movie;
} charlie, maria;
friends_t * pfriends = &charlie;
Setelah deklarasi diatas, dapat digunakan ekspresi sbb :
charlie.name
maria.favourite_movie.title
charlie.favourite_movie.year
pfriends->favourite_movie.year
(Dimana 2 ekspresi terakhir ekuivalen)
User defined data types
Definition of own types (typedef).
C++ memungkinkan kita untuk mendefinisikan tipe berdasarkan tipe data yang sudah ada.
Untuk itu digunakan keyword typedef, dengan format :
typedef existing_type new_type_name ;
dimana existing_type adalah tipe data dasar pada C++ dan new_type_name adalah nama dari
tipe baru yang didefinisikan. Contoh :
typedef char C;
typedef unsigned int WORD;
typedef char * string_t;
typedef char field [50];
Contoh diatas telah mendefinisikan empat tipe data baru : C, WORD, string_t dan field
sebagai char, unsigned int, char* dan char[50] yang akan digunakan nanti seperti berikut :
C achar, anotherchar, *ptchar1;
WORD myword;
string_t ptchar2;
field name;
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 63 dari 77
Union
Union memungkinkan bagian dari memory dapat diakses sebagai tipe data yang berbeda,
walaupun pada dasarnya mereka berada pada lokasi yang sama di memory. Pendeklarasian
dan penggunaanya hampir sama dengan struktur tetapi secara fungsional berbeda :
union model_name {
type1 element1;
type2 element2;
type3 element3;
.
.
} object_name;
Semua elemen pada deklarasi union declaration menempati tempat yang sama dimemory.
Ukuran yang digunakan diambil dari tipe yang paling besar. Contoh :
union mytypes_t {
char c;
int i;
float f;
} mytypes;
Mendefinisikan tiga elemen :
mytypes.c
mytypes.i
mytypes.f
Tiap data memiliki tipe yang berbeda, karena menempati lokasi yang sama dmemory, maka
perubahan terhadap satu elemen akan mempengaruhi elemen yang lain.
Salah satu kegunaan union, memungkinkan untuk menggabungkan tipe dasar dengan suatu
array atau struktur dari elemen yang lebih kecil. Contoh :
union mix_t{
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
Mendefinisikan tiga nama yang memungkinkan kita untuk mengakses grup 4 bytes yang sama
: mix.l, mix.s dan mix.c dan dapat digunakan menutut bagaimana kita akan mengaksesnya,
sebagai long, short atau char. Tipe data yang sudah digabungkan, arrays dan structures
dalam suatu union, maka dibawah ini merupakan cara pengakses-an yang berbeda :
Modul C++
Laboratorium Sistem Informasi Universitas Gunadarma 64 dari 77
Anonymous unions
Pada C++ terdapat option unions tanpa nama (anonymous union). Jika disertakan union dalam
structure tanpa nama objek(yang dituliskan setelah kurung kurawal { }) maka union akan
tidak memiliki nama dan kita dapat mengakses elemennya secara langsung dengan namanya.
Contoh:
union
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
} price;
} book;
anonymous union
struct {
char title[50];
char author[50];
union {
float dollars;
int yens;
};
} book;
Perbedaan deklarasi diatas adalah program pertama diberi nama pada union (price) dan yang
kedua tidak. Pada saat mengakses anggota dollars dan yens dari objek. Pada program
pertama :
book.price.dollars
book.price.yens
Sedangkan untuk program kedua :
book.dollars
book.yens

More Related Content

What's hot

Materi kuliah 03 pointer part 1
Materi kuliah 03   pointer part 1Materi kuliah 03   pointer part 1
Materi kuliah 03 pointer part 1Budi Yono
 
Ix struktur pointer
Ix struktur pointerIx struktur pointer
Ix struktur pointerDhan junkie
 
Pertemuan 11 : Algoritma & Pemrograman
Pertemuan 11 : Algoritma & PemrogramanPertemuan 11 : Algoritma & Pemrograman
Pertemuan 11 : Algoritma & PemrogramanTri Retna
 
Laporan praktikum modul vii
Laporan praktikum modul viiLaporan praktikum modul vii
Laporan praktikum modul viiDevi Apriansyah
 
Algoritma&Pemrograman C++ Pertemuan 11
Algoritma&Pemrograman C++ Pertemuan 11Algoritma&Pemrograman C++ Pertemuan 11
Algoritma&Pemrograman C++ Pertemuan 11Menny SN
 
Function
FunctionFunction
Functionwindi1
 
Awal dasar belajar c++
Awal dasar belajar c++Awal dasar belajar c++
Awal dasar belajar c++farizky berian
 
Pertemuan 9 : Algoritma & Pemrograman
Pertemuan 9 : Algoritma & PemrogramanPertemuan 9 : Algoritma & Pemrograman
Pertemuan 9 : Algoritma & PemrogramanTri Retna
 
M04b dasar program c
M04b dasar program cM04b dasar program c
M04b dasar program cBilly Alhamra
 

What's hot (16)

P1 2-tipe data
P1 2-tipe dataP1 2-tipe data
P1 2-tipe data
 
Pbo05
Pbo05Pbo05
Pbo05
 
Materi kuliah 03 pointer part 1
Materi kuliah 03   pointer part 1Materi kuliah 03   pointer part 1
Materi kuliah 03 pointer part 1
 
Fungsi value
Fungsi valueFungsi value
Fungsi value
 
Ix struktur pointer
Ix struktur pointerIx struktur pointer
Ix struktur pointer
 
Pertemuan 11 : Algoritma & Pemrograman
Pertemuan 11 : Algoritma & PemrogramanPertemuan 11 : Algoritma & Pemrograman
Pertemuan 11 : Algoritma & Pemrograman
 
Laporan praktikum modul vii
Laporan praktikum modul viiLaporan praktikum modul vii
Laporan praktikum modul vii
 
Algoritma&Pemrograman C++ Pertemuan 11
Algoritma&Pemrograman C++ Pertemuan 11Algoritma&Pemrograman C++ Pertemuan 11
Algoritma&Pemrograman C++ Pertemuan 11
 
Laporan
LaporanLaporan
Laporan
 
Pertemuan II Function
Pertemuan II FunctionPertemuan II Function
Pertemuan II Function
 
Function
FunctionFunction
Function
 
Function
FunctionFunction
Function
 
Awal dasar belajar c++
Awal dasar belajar c++Awal dasar belajar c++
Awal dasar belajar c++
 
Dasar c
Dasar cDasar c
Dasar c
 
Pertemuan 9 : Algoritma & Pemrograman
Pertemuan 9 : Algoritma & PemrogramanPertemuan 9 : Algoritma & Pemrograman
Pertemuan 9 : Algoritma & Pemrograman
 
M04b dasar program c
M04b dasar program cM04b dasar program c
M04b dasar program c
 

Viewers also liked

Pointer rapat-hkn-2012-sdy1
Pointer rapat-hkn-2012-sdy1Pointer rapat-hkn-2012-sdy1
Pointer rapat-hkn-2012-sdy1Djoko Santoso
 
Format laporan praktikum
Format laporan praktikumFormat laporan praktikum
Format laporan praktikumRidho Ajjah
 
Pengenalan konsep pemrograman c++
Pengenalan konsep pemrograman c++ Pengenalan konsep pemrograman c++
Pengenalan konsep pemrograman c++ Aan Einsam
 
Struktur data (alokasi memory)
Struktur data (alokasi memory)Struktur data (alokasi memory)
Struktur data (alokasi memory)Abbedul Thembock
 
Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)Nabil Muhammad Firdaus
 
Algoritma dan Struktur Data - Tipe Data Compound
Algoritma dan Struktur Data - Tipe Data CompoundAlgoritma dan Struktur Data - Tipe Data Compound
Algoritma dan Struktur Data - Tipe Data CompoundKuliahKita
 
Algoritma dan Struktur Data - Rekursif
Algoritma dan Struktur Data - RekursifAlgoritma dan Struktur Data - Rekursif
Algoritma dan Struktur Data - RekursifKuliahKita
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur DataAs Faizin
 

Viewers also liked (11)

Pointer rapat-hkn-2012-sdy1
Pointer rapat-hkn-2012-sdy1Pointer rapat-hkn-2012-sdy1
Pointer rapat-hkn-2012-sdy1
 
Format laporan praktikum
Format laporan praktikumFormat laporan praktikum
Format laporan praktikum
 
Pengenalan konsep pemrograman c++
Pengenalan konsep pemrograman c++ Pengenalan konsep pemrograman c++
Pengenalan konsep pemrograman c++
 
Struktur data (alokasi memory)
Struktur data (alokasi memory)Struktur data (alokasi memory)
Struktur data (alokasi memory)
 
Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)Algoritma dan Pemrograman C++ (Program Structure)
Algoritma dan Pemrograman C++ (Program Structure)
 
Algoritma dan Struktur Data - Tipe Data Compound
Algoritma dan Struktur Data - Tipe Data CompoundAlgoritma dan Struktur Data - Tipe Data Compound
Algoritma dan Struktur Data - Tipe Data Compound
 
Algoritma dan Struktur Data - Rekursif
Algoritma dan Struktur Data - RekursifAlgoritma dan Struktur Data - Rekursif
Algoritma dan Struktur Data - Rekursif
 
Efisiensi algoritma
Efisiensi algoritmaEfisiensi algoritma
Efisiensi algoritma
 
Algoritma dan Struktur Data
Algoritma dan Struktur DataAlgoritma dan Struktur Data
Algoritma dan Struktur Data
 
Kata pengantar
Kata pengantarKata pengantar
Kata pengantar
 
Contoh kata pengantar
Contoh kata pengantarContoh kata pengantar
Contoh kata pengantar
 

Similar to Pointer c++

PPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptx
PPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptxPPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptx
PPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptxhudriyah1
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_dataRoziq Bahtiar
 
MAKALAH DATA STRUKTURE (Diki Candra).docx
MAKALAH DATA STRUKTURE (Diki Candra).docxMAKALAH DATA STRUKTURE (Diki Candra).docx
MAKALAH DATA STRUKTURE (Diki Candra).docxDikicandra6
 
Algoritma dan Struktur Data - tipe data compound
Algoritma dan Struktur Data - tipe data compoundAlgoritma dan Struktur Data - tipe data compound
Algoritma dan Struktur Data - tipe data compoundGeorgius Rinaldo
 
Konsep pointer Univ. BALE
Konsep pointer Univ. BALEKonsep pointer Univ. BALE
Konsep pointer Univ. BALEstaffpengajar
 
Pertemuan 8.ppt
Pertemuan 8.pptPertemuan 8.ppt
Pertemuan 8.pptfauziahUG
 
MAKALAH POINTER (DIKI CANDRA) (1).docx
MAKALAH POINTER (DIKI CANDRA) (1).docxMAKALAH POINTER (DIKI CANDRA) (1).docx
MAKALAH POINTER (DIKI CANDRA) (1).docxDikicandra6
 
Pengenalan pascal asli
Pengenalan pascal asliPengenalan pascal asli
Pengenalan pascal asliNadya Olivia
 

Similar to Pointer c++ (20)

PPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptx
PPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptxPPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptx
PPT-UEU-Bahasa-Pemrograman-Pertemuan-9.pptx
 
Pertemuan5.ppt
Pertemuan5.pptPertemuan5.ppt
Pertemuan5.ppt
 
7 Pointer
7 Pointer7 Pointer
7 Pointer
 
Resume praktikum 3__pointer
Resume praktikum 3__pointerResume praktikum 3__pointer
Resume praktikum 3__pointer
 
1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data1. variable identifier dan_tipe_data
1. variable identifier dan_tipe_data
 
Alpro tutor
Alpro tutorAlpro tutor
Alpro tutor
 
Pointer
PointerPointer
Pointer
 
Topik 12 Pointer
Topik 12 PointerTopik 12 Pointer
Topik 12 Pointer
 
MAKALAH DATA STRUKTURE (Diki Candra).docx
MAKALAH DATA STRUKTURE (Diki Candra).docxMAKALAH DATA STRUKTURE (Diki Candra).docx
MAKALAH DATA STRUKTURE (Diki Candra).docx
 
Pertemuan6.ppt
Pertemuan6.pptPertemuan6.ppt
Pertemuan6.ppt
 
Algoritma dan Struktur Data - tipe data compound
Algoritma dan Struktur Data - tipe data compoundAlgoritma dan Struktur Data - tipe data compound
Algoritma dan Struktur Data - tipe data compound
 
Elemen Dasar C++
Elemen Dasar C++Elemen Dasar C++
Elemen Dasar C++
 
Pointer
PointerPointer
Pointer
 
Konsep pointer Univ. BALE
Konsep pointer Univ. BALEKonsep pointer Univ. BALE
Konsep pointer Univ. BALE
 
Pertemuan 8.ppt
Pertemuan 8.pptPertemuan 8.ppt
Pertemuan 8.ppt
 
Pointer
PointerPointer
Pointer
 
207-P02.pdf
207-P02.pdf207-P02.pdf
207-P02.pdf
 
MAKALAH POINTER (DIKI CANDRA) (1).docx
MAKALAH POINTER (DIKI CANDRA) (1).docxMAKALAH POINTER (DIKI CANDRA) (1).docx
MAKALAH POINTER (DIKI CANDRA) (1).docx
 
Pengenalan pascal asli
Pengenalan pascal asliPengenalan pascal asli
Pengenalan pascal asli
 
Makalah Alprog
Makalah AlprogMakalah Alprog
Makalah Alprog
 

More from Alvin Setiawan

Penyelesaian pers-biseksi13
Penyelesaian pers-biseksi13Penyelesaian pers-biseksi13
Penyelesaian pers-biseksi13Alvin Setiawan
 
Penyelesaian persamaan-non-linear
Penyelesaian persamaan-non-linearPenyelesaian persamaan-non-linear
Penyelesaian persamaan-non-linearAlvin Setiawan
 
Pengembangan sistem 1 2
Pengembangan sistem 1 2Pengembangan sistem 1 2
Pengembangan sistem 1 2Alvin Setiawan
 
Modul pelatihan ly_x_untuk_jurnal-feb-2cols
Modul pelatihan ly_x_untuk_jurnal-feb-2colsModul pelatihan ly_x_untuk_jurnal-feb-2cols
Modul pelatihan ly_x_untuk_jurnal-feb-2colsAlvin Setiawan
 
Metode numerik-rinaldi-munir-libre
Metode numerik-rinaldi-munir-libreMetode numerik-rinaldi-munir-libre
Metode numerik-rinaldi-munir-libreAlvin Setiawan
 
Metode numerik-buku-ajar-unila
Metode numerik-buku-ajar-unilaMetode numerik-buku-ajar-unila
Metode numerik-buku-ajar-unilaAlvin Setiawan
 
Met num3 persnonl-inier_baru
Met num3 persnonl-inier_baruMet num3 persnonl-inier_baru
Met num3 persnonl-inier_baruAlvin Setiawan
 
Met num02 persamaan non linier
Met num02 persamaan non linierMet num02 persamaan non linier
Met num02 persamaan non linierAlvin Setiawan
 
Membuat dokumen dengan latex ver.0.3
Membuat dokumen dengan latex   ver.0.3Membuat dokumen dengan latex   ver.0.3
Membuat dokumen dengan latex ver.0.3Alvin Setiawan
 
Membangun website e-commerce_berbasis_php_dan_my_sql
Membangun website e-commerce_berbasis_php_dan_my_sqlMembangun website e-commerce_berbasis_php_dan_my_sql
Membangun website e-commerce_berbasis_php_dan_my_sqlAlvin Setiawan
 
M8 perancangan terinci
M8 perancangan terinciM8 perancangan terinci
M8 perancangan terinciAlvin Setiawan
 

More from Alvin Setiawan (20)

Penyelesaian pers-biseksi13
Penyelesaian pers-biseksi13Penyelesaian pers-biseksi13
Penyelesaian pers-biseksi13
 
Penyelesaian persamaan-non-linear
Penyelesaian persamaan-non-linearPenyelesaian persamaan-non-linear
Penyelesaian persamaan-non-linear
 
Pengembangan sistem 1 2
Pengembangan sistem 1 2Pengembangan sistem 1 2
Pengembangan sistem 1 2
 
Pedoman ta2008
Pedoman ta2008Pedoman ta2008
Pedoman ta2008
 
Pbw week 01 basics
Pbw week 01   basicsPbw week 01   basics
Pbw week 01 basics
 
Paper
PaperPaper
Paper
 
Nl eqn lab
Nl eqn labNl eqn lab
Nl eqn lab
 
Modul6
Modul6Modul6
Modul6
 
Modul pelatihan ly_x_untuk_jurnal-feb-2cols
Modul pelatihan ly_x_untuk_jurnal-feb-2colsModul pelatihan ly_x_untuk_jurnal-feb-2cols
Modul pelatihan ly_x_untuk_jurnal-feb-2cols
 
Ml2 f304213
Ml2 f304213Ml2 f304213
Ml2 f304213
 
Micro sim template_2
Micro sim template_2Micro sim template_2
Micro sim template_2
 
Metode numerik-rinaldi-munir-libre
Metode numerik-rinaldi-munir-libreMetode numerik-rinaldi-munir-libre
Metode numerik-rinaldi-munir-libre
 
Metode numerik-buku-ajar-unila
Metode numerik-buku-ajar-unilaMetode numerik-buku-ajar-unila
Metode numerik-buku-ajar-unila
 
Metode regula falsi
Metode regula falsiMetode regula falsi
Metode regula falsi
 
Metode biseksi
Metode biseksiMetode biseksi
Metode biseksi
 
Met num3 persnonl-inier_baru
Met num3 persnonl-inier_baruMet num3 persnonl-inier_baru
Met num3 persnonl-inier_baru
 
Met num02 persamaan non linier
Met num02 persamaan non linierMet num02 persamaan non linier
Met num02 persamaan non linier
 
Membuat dokumen dengan latex ver.0.3
Membuat dokumen dengan latex   ver.0.3Membuat dokumen dengan latex   ver.0.3
Membuat dokumen dengan latex ver.0.3
 
Membangun website e-commerce_berbasis_php_dan_my_sql
Membangun website e-commerce_berbasis_php_dan_my_sqlMembangun website e-commerce_berbasis_php_dan_my_sql
Membangun website e-commerce_berbasis_php_dan_my_sql
 
M8 perancangan terinci
M8 perancangan terinciM8 perancangan terinci
M8 perancangan terinci
 

Pointer c++

  • 1. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 44 dari 77 6. Pointer Obyektif Praktikum : • Mengerti konsep dasar apa itu pointer dan penggunaannya • Mengerti apa itu Reference dan hubungannya dengan pointer • Mengerti dan dapat menggunakan pointer pada C++ • Mengetahui hubungan antara pointer dan memory Variabel merupakan suatu nilai yang disimpan dalam memory yang dapat diakses dengan identifier. Variabel ini sesunggunhnya disimpan pada suatu alamat didalam memory. Dimana setiap alamat memory akan berbeda dengan yang lainnya (unik). Pengantar Ketika suatu variable dideklarasikan , ada 3 hal yang dapat diassosiasikan yaitu: nama, type data dan alamat pada memori. Contohnya deklarasi Int n; Berdasarkan pendeklarasian diatas, n adalah nama variable dengan type data integer yang biasa ditulis Int ,dan alamat tempat alokasi memori untuk n akan disimpan Dengan alamat memory dengan notasi hexadecimal seperti 0x8fd4fff4 yang dapat digambarkan sbb : 0x8fd4fff4 n int kotak pada gambar mewakili tempat penyimpanan variabel yang berada di memory, nama variabel berada disebelah kiri kotak, alamat variabel terdapat diatas kotak, dan jenis tipe data berada dibawahnya sedangkan apabila diketahui nilai variabel tersebut maka akan terdapat didalam kotak. 0x8fd4fff4 n int 33
  • 2. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 45 dari 77 suatu nilai variabel dapat diakses melalui nama variabelnya, sebagai contoh kita dapat mengetahui nilai variabel dengan menuliskan statement cout << n; dan untuk mengakses suatu alamat suatu variabel dapat digunakan operator alamat & , sebagai contoh kita dapat mengetahui alamat variable pada memori dengan statement cout << &n; contoh program mencetak nilai pointer #include <iostream.h> #include <conio.h> main() { int n = 33; cout << "n = " << n << endl; // mencetak nilai n cout << "&n = " << &n << endl; // mencetak alamat n getch(); return 0; } Dengan output seperti : n = 33 &n = 0x8fd4fff4 Dapat disimpulkan bahwa nama variabel menunjukkan nilai suatu variabel secara lagsung sedangkan suatu pointer menunjukkan atau mengarahkan suatu nilai dengan tidak langsung yaitu dengan cara mereferensikannya. 1. Reference Suatu Reference atau referensi adalah suatu alias atau dapat dikatakan sebagai nama lain sebagai petunjuk dari nama sebenarnya (sinonim). Reference dapat dideklarasikan menggunakan sintaks : Tipe& nama-ref = nama-var; Dimana tipe& adalah tipe data, nama-ref adalah nama referensi, dan nama-var adalah nama variabel. Sebagai contoh , pendeklarasian reference int& rn=n; // rn adalah sinonim untuk n
  • 3. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 46 dari 77 Contoh menggunakan Reference 1 #include <iostream.h> #include <conio.h> main() { int n = 33; int& rn = n; // rn adalah reference untuk n cout << "n = " << n << ", rn = " << rn << endl; --n; cout << "n = " << n << ", rn = " << rn << endl; rn *= 2; cout << "n = " << n << ", rn = " << rn << endl; getch(); return 0; } Pada deklarasi r dan rn adalah nama berbeda untuk suatu variabel yang sama; r dan rn memiliki nilai variabel yang sama. Seperti konstanta, reference harus diinisialisasi ketika dideklarasikan dan diinisialisasikan dengan variable bukan literal. int& rn=33; // ERROR: 33 is not a variable! Ada beberapa compiler yang memperbolehkan pendeklarasian dengan literal, tetapi akan tetap muncul warning mengenai temporary variable yang harus dibuat untuk mengalokasikan memory yang dimana dapat dipanggil reference rn. Meskipun reference harus diinisialisasikan pada variable, refernce bukan variable. Variable adalah suatu objek Reference adalah variable yang tidak terpisah karena akan mengarah pada satu nilai dan satu alamat.
  • 4. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 47 dari 77 Contoh menggunakan Reference 2 #include <iostream.h> #include <conio.h> main() { clrscr(); int n = 33; int& rn=n; // r adalah sinonim untuk n cout << "&n = " << &n << ", &rn = " << &rn << endl; int& rn2=n; // r adalah sinonim yg lain utk n int& rn3=rn; // r adalah sinonim lain utk n cout << "&rn2 = " << &rn2 << ", &rn3 = " << &rn3 << endl; getch(); return 0; } Output : &n = 0x8fb8fff4, &rn = 0x8fb8fff4 &rn2 = 0x8fb8fff4, &rn3 = 0x8fb8fff4 Pada baris pertama output menunjukkan bahwa n dan rn memiliki alamat yang sama yaitu 0x8fb8fff4 dengan nama yang berbeda untuk satu objek. Sedangkan pada baris kedua output menunjukkan bahwa reference tersebut mengarah atau mereferensi pada suatu objek, pada program ini hanya terdapat satu objek yaitu yang terdapat pada alamat 0x8fb8fff4, kesimpulannya reference rn, rn2, rn3 mengarah ke objek yang sama. 0x8fb8fff4 n int rn rn2 rn3 33
  • 5. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 48 dari 77 pada C++, operator reference & digunakan untuk 2 tujuan yang khusus : 1. ketika diterapkan sebagai prefix atau awalan dari nama suatu objek 2. ketika diterapkan sebagai suffix atau akhiran pada suatu type T, yang menunjukkan type yang “ mengarah ke T “, sebagai contoh, int& adalah type yang “mengarah ke int”, pada contoh reference 2 n dideklarasikan mempunyai tipe data int, dan rn dideklarasikan untuk memiliki type reference int. C++ memiliki 5 type derived, ketika T adalah type maka 1. const T adalah type derived “ constant T ” 2. T() adalah type derived “ function returning T “ 3. T[] adalah type derived “ array of T “ 4. T& adalah type derived “ reference to T “ 5. T* adalah type derived “ Pointer to T “ POINTER Operator reference & mengembalikan alamat memory dari suatu variable ketika digunakan. Kita juga dapat menyimpan suatu alamat pada suatu variable lain. Type dari variable yang dapat menyimpan suatu alamat disebut Pointer. Variabel pointer harus mendapatkan type “ pointer to T “ , dimana T adalah type dari objek dimana pointer itu ditunjuk. Seperti yang sudah dijelaskan pada akhir penjelasan reference bahwa “pointer to T” disimbolkan dengan T* , sebagai contoh bahwa suatu alamat dari variable dengan tipe int dapat disimpan dalam variabel pointer dengan tipe int*.
  • 6. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 49 dari 77 Menggunakan pointer variabel #include <iostream.h> #include <conio.h> main() { clrscr(); int n = 33; cout << " n = " << n << ", &n = " << &n << endl; int* pn=&n; // pn memegang alamat n cout << " pn = " << pn << endl; cout << " &pn = " << &pn << endl; getch(); return 0; } Output : n = 33, &n = 0x8fbafff4 pn = 0x8fbafff4 &pn = 0x8fbafff2 Dapat digambarkan sbb : 0x8fbafff4 0x8fbafff2 n pn Int int* Variabel n dideklarasi dengan angka 33 , dengan alamat 0x8fbafff4. variable pn dideklarasi sama dengan &n yang merupakan alamat dari n, jadi nilai dari pn adalah 0x8fbafff4 , tetapi pn adalah objek yang berbeda yang memiliki nilai alamat dari n , dikatakan berbeda karena pn memiliki alamat berbeda yaitu 0x8fbafff2. 0x8fbafff433
  • 7. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 50 dari 77 n int pn int * variabel pn disebut “pointer” karena bernilai “points” atau alamat dari lokasi nilai yang lain. Nilai dari pointer tsb adalah suatu alamat. Alamat tersebut tergantung pada computer dimana program itu berjalan. Dengan gambar diatas dapat pula dijelaskan bahwa 2 variable n dan pn dimana pn adalah pointer dari n dan n memiliki nilai 33. pointer dapat dikatakan juga sebagai “locator” : yang mengalokasikan objek lain melalui alamat. Operator Alamat (Address operator (&)) Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompilerdan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh: ted = &andy; Akan memberikan variable ted alamat dari variable andy, karena variable andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb : andy = 25; fred = andy; ted = &andy; Maka hasilnya: 33
  • 8. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 51 dari 77 Operator Reference (*) Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh : beth = *ted; (dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25. Ekspresi dibawah ini semuanya benar, perhatikan : andy == 25 &andy == 1776 ted == 1776 *ted == 25 Ekspresi pertama merupakan assignation bahwa andy=25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar : *ted == andy Deklarasi variable bertipe pointer Format deklarasi pointer : type * pointer_name; Dimana type merupakan tipe dari data yang ditunjuk, bukan tipe dari pointer-nya. Contoh : int * number; char * character; float * greatnumber;
  • 9. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 52 dari 77 Contoh : // my first pointer #include <iostream.h> int main () { int value1 = 5, value2 = 15; int * mypointer; mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout << "value1==" << value1 << "/ value2==" << value2; return 0; } Output : value1==10 / value2==20 Perhatikan bagaimana nilai dari value1 dan value2 diubah secara tidak langsung. Pertama mypointer diberikan alamat value1 dengan menggunakan tanda ampersand (&). Kemudian memberikan nilai 10 ke nilai yang ditunjuk oleh mypointer, yaitu alamat dari value1, maka secara tidak langsung value1 telah dimodifikasi. Begitu pula untuk value2. Contoh : // more pointers #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = address of value1 p2 = &value2; // p2 = address of value2 *p1 = 10; // value pointed by p1 = 10 *p2 = *p1; // value pointed by p2 = value pointed by p1 p1 = p2; // p1 = p2 (value of pointer copied) *p1 = 20; // value pointed by p1 = 20 cout << "value1==" << value1 << "/ value2==" << value2; return 0; } Output : value1==10 / value2==20
  • 10. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 53 dari 77 Array dan Pointer Identifier suatu array equivalen dengan alamat dari elemen pertama, pointer equivalen dengan alamat elemen pertama yang ditunjuk. Perhatikan deklarasi berikut: int numbers [20]; int * p; maka deklarasi dibawah ini juga benar : p = numbers; p dan numbers equivalen, dan memiliki sifat (properties) yang sama. Perbedaannya, user dapat menentukan nilai lain untuk pointer p dimana numbers akan selalu menunjuk nilai yang sama seperti yang telah didefinisikan. p, merupakan variable pointer, numbers adalah constant pointer. Karena itu walaupun instruksi diatas benar, tetapi tidak untuk instruksi dibawah ini : numbers = p; karena numbers adalah array (constant pointer), dan tidak ada nilai yang dapat diberikan untuk identifier konstant (constant identifiers). Contoh : Output : // more pointers 10, 20, 30, 40, 50, #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; } Inisialisasi Pointer Contoh: int number; int *tommy = &number; Equivalen dengan : int number; int *tommy; tommy = &number;
  • 11. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 54 dari 77 Seperti pada array, inisialisasi isi dari pointer dapat dilakukan dengan deklarasi seperti contoh berikut : char * terry = "hello"; Misalkan "hello" disimpan pada alamat 1702 dan seterusnya, maka deklarasi tadi dapat digambarkan sbb : terry berisi nilai 1702 dan bukan 'h' atau "hello", walaupun 1702 menunjuk pada karakter tersebut. Sehingga jika akan dilakukan perubahan pada karakter 'o' diganti dengan tanda '!' maka ekspresi yang digunakan ada 2 macam : terry[4] = '!'; *(terry+4) = '!'; Penulisan terry[4] dan *(terry+4), mempunyai arti yang sama. Jika digambarkan : Pointer Arithmatika Contoh, char memerlukan 1 byte, short memerlukan 2 bytes dan long memerlukan 4. Terdapat 3 buah pointer : char *mychar; short *myshort; long *mylong; ekspresi diatas akan menunjuk pada lokasi dimemory masing-masing 1000, 2000 and 3000, sehingga jika dituliskan : mychar++; myshort++; mylong++; mychar, akan bernilai 1001, myshort bernilai 2002, dan mylong bernilai 3004. Alasannya adalah ketika terjadi pertambahan maka akan ditambahkan dengan tipe yang sama seperti yang didefinisikan berupa ukuran dalam bytes.
  • 12. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 55 dari 77 Perhatikan ekspresi dibawah ini : *p++; *p++ = *q++; Ekspresi pertama equivalen dengan *(p++) dan yang dilakukan adalah menambahkan p (yaitu alamat yang ditunjuk, bukan nilai yang dikandungnya). Ekspresi kedua, yang dilakukan pertama adalah memberikan nilai *q ke *p dan kemudian keduanya ditambahkan 1 atau dengan kata lain : *p = *q; p++; q++; void pointer Tipe pointer void merupakan tipe khusus. void pointers dapat menunjuk pada tipe data apapun, nilai integer value atau float, maupun string atau karakter. Keterbatasannya adalah tidak dapat menggunakan operator asterisk (*), karena panjang pointer tidak diketahui, sehingga diperlukan operator type casting atau assignations untuk mengembalikan nilai void pointer ketipe data sebenarnya. Contoh : // integer increaser #include <iostream.h> void increase (void* data, int type) { switch (type) { case sizeof(char) : (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long) : (*((long*)data))++; break; } } int main () { char a = 5; short b = 9; long c = 12;
  • 13. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 56 dari 77 increase (&a,sizeof(a)); increase (&b,sizeof(b)); increase (&c,sizeof(c)); cout << (int) a << ", " << b << ", " << c; return 0; } Output : 6, 10, 13 Pointer untuk functions C++ memperbolehkan operasi dengan pointer pada function. Kegunaan yang utama adalah untuk memberikan satu function sebagai parameter untuk function lainnya. Deklarasi pointer untuk function sama seperti prototype function kecuali nama function dituliskan diantara tanda kurung () dan operator asterisk (*) diberikan sebelum nama. Contoh : // pointer to functions #include <iostream.h> int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int (*minus)(int,int) = subtraction; int operation (int x, int y, int (*functocall)(int,int)) { int g; g = (*functocall)(x,y); return (g); } int main () { int m,n; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n; return 0; } Output : 8
  • 14. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 57 dari 77 Dari contoh diatas, minus merupakan pointer global untuk function yang mempunyai 2 parameters bertipe int, kemudian diberikan untuk menunjuk function subtraction, ditulis dalam satu baris instruksi : int (* minus)(int,int) = subtraction; Structures Data structures Struktur data merupakan kumpulan berbagai tipe data yang memiliki ukuran yang berbeda di kelompokan dalam satu deklarasi unik, dengan format sbb : struct model_name { type1 element1; type2 element2; type3 element3; . . } object_name; dimana model_name adalah nama untuk model tipe stukturnya dan parameter optional object_name merupakan identifier yang valid untuk objek sturktur. Diantara kurung kurawal { } berupa tipe dan sub-identifier yang mengacu ke elemen pembentuk struktur. Jika pendefinisian stuktur menyertakan parameter model_name (optional), maka parameter tersebut akan menjadi nama tipe yang valid ekuivalen dengan struktur. Contoh : struct products { char name [30]; float price; } ; products apple; products orange, melon; Didefinisikan model struktur products dengan dua field : name dan price, dengan tipe yang berbeda. Kemudian tipe struktur tadi (products) digunakan untuk mendeklarasikan tiga objek : apple, orange dan melon. Ketika dideklarasikan, products menjadi tnama tipe yang valid seperti tipe dasar int, char atau short dan dapat mendeklarasikan objects (variables) dari tipe tersebut. Optional field yaitu object_name dapat dituliskan pada akhir deklarasi struktur untuk secara langsung mendeklarasikan object dari tipe struktur. Contoh : struct products { char name [30]; float price; } apple, orange, melon;
  • 15. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 58 dari 77 Sangat penting untuk membedakan antara structure model, dan structure object. model adalah type, dan object adalah variable. Kita dapat membuat banyak objects (variables) dari satu model (type). Contoh : // example about structures #include <iostream.h> #include <string.h> #include <stdlib.h> struct movies_t { char title [50]; int year; } mine, yours; void printmovie (movies_t movie); int main () { char buffer [50]; strcpy (mine.title, "2001 A Space Odyssey"); mine.year = 1968; cout << "Enter title: "; cin.getline (yours.title,50); cout << "Enter year: "; cin.getline (buffer,50); yours.year = atoi (buffer); cout << "My favourite movie is:n "; printmovie (mine); cout << "And yours:n "; printmovie (yours); return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")n"; } Output : Enter title: Alien Enter year: 1979 My favourite movie is: 2001 A Space Odyssey (1968) And yours: Alien (1979)
  • 16. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 59 dari 77 Contoh diatas menjelaskan bagaimana menggunakan elemen dari struktur dan struktur itu sendiri sebagai variable normal. Contoh, yours.year merupakan variable valid dengan tipe int, dan mine.title merupakan array valid dari 50 chars. Perhatikan mine dan yours juga berlaku sebagai valid variable dari tipe movies_t ketika di- pass ke-function printmovie(). Salah satu keuntungan dari structures yaitu kita dapat mengacu pada setiap elemennya atau keseluruhan blok struktur. Contoh : // array of structures #include <iostream.h> #include <stdlib.h> #define N_MOVIES 5 struct movies_t { char title [50]; int year; } films [N_MOVIES]; void printmovie (movies_t movie); int main () { char buffer [50]; int n; for (n=0; n<N_MOVIES; n++) { cout << "Enter title: "; cin.getline (films[n].title,50); cout << "Enter year: "; cin.getline (buffer,50); films[n].year = atoi (buffer); } cout << "nYou have entered these movies:n"; for (n=0; n<N_MOVIES; n++) printmovie (films[n]); return 0; } void printmovie (movies_t movie) { cout << movie.title; cout << " (" << movie.year << ")n"; }
  • 17. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 60 dari 77 Output : Enter title: Alien Enter year: 1979 Enter title: Blade Runner Enter year: 1982 Enter title: Matrix Enter year: 1999 Enter title: Rear Window Enter year: 1954 Enter title: Taxi Driver Enter year: 1975 You have entered these movies: Alien (1979) Blade Runner (1982) Matrix (1999) Rear Window (1954) Taxi Driver (1975) Pointer to structure Sama seperti pada tipe lainnya, struktur juga dapat ditunjuk oleh pointer. Aturannya sama untuk setiap tipe data. Pointer harus dideklarasikan sebagai pointer untuk struktur : struct movies_t { char title [50]; int year; }; movies_t amovie; movies_t * pmovie; amovie merupakan object dari tipe struct movies_t dan pmovie adalah pointer untuk menunjuk ke objek dari tipe struct movies_t. maka, deklarasi dibawah ini juga benar : pmovie = &amovie; Contoh : // pointers to structures #include <iostream.h> #include <stdlib.h> struct movies_t { char title [50]; int year; }; int main ()
  • 18. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 61 dari 77 { char buffer[50]; movies_t amovie; movies_t * pmovie; pmovie = & amovie; cout << "Enter title: "; cin.getline (pmovie->title,50); cout << "Enter year: "; cin.getline (buffer,50); pmovie->year = atoi (buffer); cout << "nYou have entered:n"; cout << pmovie->title; cout << " (" << pmovie->year << ")n"; return 0; } Output : Enter title: Matrix Enter year: 1999 You have entered: Matrix (1999) Operator -> merupakan operator penunjuk yang digunakan secara khusus bersama dengan pointer untuk struktur dan pointer untuk class. Memungkinkan kita untuk tidak menggunakan tanda kurung pada setiap anggota struktur yang ditunjuk. Dalam contoh digunakan : pmovie->title Atau dalam penulisan yang lain : (*pmovie).title Kedua ekspresi tersebut diatas : pmovie->title dan (*pmovie).title benar dan berarti evaluasi elemen title dari struktur yang ditunjuk (pointed by) pmovie. Harus dibedakan dari : *pmovie.title Yang ekuivalen dengan : *(pmovie.title) Dibawah ini merupaka tabel rangkuman, kombinasi yang mungkin terjadi antara pointer dan struktur : Expression Description Equivalent pmovie.title Element title of structure pmovie pmovie->title Element title of structure pointed by pmovie (*pmovie).title *pmovie.title Value pointed by element title of structure pmovie *(pmovie.title)
  • 19. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 62 dari 77 Nesting structures Struture juga dapat berbentuk nested (bersarang) sehingga suatu elemen dari suatu struktur dapat menjadi elemen pada struktur yang lain : struct movies_t { char title [50]; int year; } struct friends_t { char name [50]; char email [50]; movies_t favourite_movie; } charlie, maria; friends_t * pfriends = &charlie; Setelah deklarasi diatas, dapat digunakan ekspresi sbb : charlie.name maria.favourite_movie.title charlie.favourite_movie.year pfriends->favourite_movie.year (Dimana 2 ekspresi terakhir ekuivalen) User defined data types Definition of own types (typedef). C++ memungkinkan kita untuk mendefinisikan tipe berdasarkan tipe data yang sudah ada. Untuk itu digunakan keyword typedef, dengan format : typedef existing_type new_type_name ; dimana existing_type adalah tipe data dasar pada C++ dan new_type_name adalah nama dari tipe baru yang didefinisikan. Contoh : typedef char C; typedef unsigned int WORD; typedef char * string_t; typedef char field [50]; Contoh diatas telah mendefinisikan empat tipe data baru : C, WORD, string_t dan field sebagai char, unsigned int, char* dan char[50] yang akan digunakan nanti seperti berikut : C achar, anotherchar, *ptchar1; WORD myword; string_t ptchar2; field name;
  • 20. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 63 dari 77 Union Union memungkinkan bagian dari memory dapat diakses sebagai tipe data yang berbeda, walaupun pada dasarnya mereka berada pada lokasi yang sama di memory. Pendeklarasian dan penggunaanya hampir sama dengan struktur tetapi secara fungsional berbeda : union model_name { type1 element1; type2 element2; type3 element3; . . } object_name; Semua elemen pada deklarasi union declaration menempati tempat yang sama dimemory. Ukuran yang digunakan diambil dari tipe yang paling besar. Contoh : union mytypes_t { char c; int i; float f; } mytypes; Mendefinisikan tiga elemen : mytypes.c mytypes.i mytypes.f Tiap data memiliki tipe yang berbeda, karena menempati lokasi yang sama dmemory, maka perubahan terhadap satu elemen akan mempengaruhi elemen yang lain. Salah satu kegunaan union, memungkinkan untuk menggabungkan tipe dasar dengan suatu array atau struktur dari elemen yang lebih kecil. Contoh : union mix_t{ long l; struct { short hi; short lo; } s; char c[4]; } mix; Mendefinisikan tiga nama yang memungkinkan kita untuk mengakses grup 4 bytes yang sama : mix.l, mix.s dan mix.c dan dapat digunakan menutut bagaimana kita akan mengaksesnya, sebagai long, short atau char. Tipe data yang sudah digabungkan, arrays dan structures dalam suatu union, maka dibawah ini merupakan cara pengakses-an yang berbeda :
  • 21. Modul C++ Laboratorium Sistem Informasi Universitas Gunadarma 64 dari 77 Anonymous unions Pada C++ terdapat option unions tanpa nama (anonymous union). Jika disertakan union dalam structure tanpa nama objek(yang dituliskan setelah kurung kurawal { }) maka union akan tidak memiliki nama dan kita dapat mengakses elemennya secara langsung dengan namanya. Contoh: union struct { char title[50]; char author[50]; union { float dollars; int yens; } price; } book; anonymous union struct { char title[50]; char author[50]; union { float dollars; int yens; }; } book; Perbedaan deklarasi diatas adalah program pertama diberi nama pada union (price) dan yang kedua tidak. Pada saat mengakses anggota dollars dan yens dari objek. Pada program pertama : book.price.dollars book.price.yens Sedangkan untuk program kedua : book.dollars book.yens