Anda di halaman 1dari 6

..

..
.. Pemrograman Berorientasi Object menggunakan C++ oleh Teguh Wiharko, ST

..
.
Modul 10. Pointer
Alamat (dereference) Operator(&):
Ampersand sign (&) : berarti alamat dari /"address of" dari sebuah data pada
memori, hal ini merupakan implementasi dari pointer pada C++.
Contoh:
ted = &andy;
contoh penggunaan:
andy = 25;
fred = andy;
ted = &andy;
Struktur:

Reference operator (*):


"value pointed by" nilai yang ditunjukkan oleh suatu variable pointer.
Contohnya:
beth = *ted;
Artinya: "beth sama dengan nilai yang ditunjukkan oleh ted"). beth =25, ted =1776, dan
the value pointed by 1776 = 25.
Strukturnya dalam memori:

Contoh lainnya:
beth = ted; // beth equal to ted ( 1776 )
beth = *ted; // beth equal to value pointed by ted ( 25 )

Contoh di atas sama dengan;


andy = 25;
ted = &andy;

Sehingga argument-argumen berikut ini adalah benar:


andy == 25
&andy == 1776
ted == 1776
............................
*ted == 25
*ted == andy

Deklarasi variable dengan tipe pointer:


type * pointer_name;

Dimana: type adalah tipe dari data yang ditunjuk oleh pointer, bukan tipe data
pointer itu sendiri. Contoh :
int * number;
char * character;
float * greatnumber;

// program pointer I value1==10 /


#include <iostream.h> value2==20

int main ()
{
int value1 = 5, value2 = 15;
int * mypointer;

mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" << value1 << "/
value2==" << value2;
return 0;
}
Prog101.cpp

// program pointer II value1==10 /


#include <iostream.h> value2==20

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;
}
Prog102.cpp

Cara lain untuk mendeklarasikan tipe data pointer:


30
int *p1, *p2;

Pointers and array:


int numbers [20];
int * p;
Maka cara pengisian nilai ke dalam variable p berikut adalah benar:
p = numbers;
Tetapi statemen berikut adalah salah:
numbers = p;

// program pointer III 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;
}
Prog103.cpp

Cara lain untuk mengisi nilai menggunakan pointer pada array:


a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0

Inisialisasi Pointer :
int number;
int *tommy = &number;

Cara di atas dapat pula ditulis dengan cara sebagai berikut:


int number;
int *tommy;
tommy = &number;

Cara di atas juga tidak sama dengan cara berikut ini:


int number;
int *tommy;
*tommy = &number;

Contoh lain inisialisasi pointer:


char * terry = "hello";
Grafik:

31
keterangan:
variable terry berisi nilai 1702 dan bukan ‘h’ ataupun “hello”

Untuk merubah karakter ‘o’ pada string “hello” di atas dapat digunakan dua cara
berikut ini:
terry[4] = '!';
*(terry+4) = '!';
grafik:

Arithmetic of pointers

Alamat Variabel Pointer pada Memori:


Contoh:
char *mychar; // char = 1 byte dilokasi memori 1000
short *myshort; // short = 2 byte dilokasi memori 2000
long *mylong; // long = 4 byte dilokasi memori 3000

Maka, bila kita menulis statement berikut ini :


mychar++;
myshort++;
mylong++;

Grafik:

Pointer to pointer:
Contoh:
32
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;

grafik di bawah ini menunjukan bila alamat variable a, b, dan c di atas berada pada alamat
memori 7230, 8092 and 10502:

Maka :
c is a variable of type (char **) with a value of 8092
*c is a variable of type (char*) with a value of 7230
**c is a variable of type (char) with a value of'z'

void pointer:
void pointer dapat menunjuk ke semua tipe data , dari integer atau float atau string dan karakter.
Salah satu kegunaan dari void pointer adalah untuk mengisi parameter ke suatu fungsi,
seperti contoh di bawah ini:

// penambahan integer 6, 10, 13


#include <iostream.h>

void Tambah(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;
Tambah (&a,sizeof(a));
Tambah (&b,sizeof(b));
Tambah (&c,sizeof(c));
cout << (int) a << ", " << b << ", " << c;
return 0;
}
Prog104.cpp

Pointers to functions:

// pointer to function 8

33
#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;
}
Prog105.cpp

Keterangan:
minus merupakan pointer global ke subah fungsi yang mempunyai 2 parameter bertipe int, dengan cara
menuliskan statement berikut ini:
int (* minus)(int,int) = subtraction;

Latihan:
1. Jelaskan perbedaan antara variable biasa dengan variable pointer!
2. Jelaskan penggunaan pointer pada struktur data Array!
3. Jelaskan input, proses dan output dari program-program di atas!

34

Anda mungkin juga menyukai