Lompat ke konten Lompat ke sidebar Lompat ke footer

Pointer pada Algoritma

Pointer pada Algoritma


Pointer merupakan sebuah variabel yang menyimpan alamat memori.  Cara mendeklarasikan variabel pointer dengan menggunakan simbol asterisk (*) antara tipe data dan nama variabel. 

Berikut adalah bentuk umum dari pendeklarasian sebuah variabel pointer.

tipe_data *nama_pointer;


Contoh:

int *a;
char *b;

pada pernyataan diatas, a dan b adalah variabel pointer. a berisi alamaat memori dari tipe int, dan b berisi alamat memori dari tipe char.  Secara umum a disebut variabel pointer dari tipe int, dan b disebut variabel pointer dari tipe char.


int *a, b;

pada pernyataan diatas, hanya a yang merupakan variabel pointer.  b merupakan variabel int, bukan variabel pointer.

int *a, *b;

a dan b merupakan variabel pointer dari tipe int.



Operator Alamat (&)

Simbol ampersand (&) disebut sebagai operator alamat, yang merupakan sebuah operatos unary yang mengembalikan alamat dari operannya.

Contoh:
int x;
int *y;

pernyataan :
y=&x
mengisikan alamat dari x ke y, sehingga x dan nilai dari y menunjuk ke alamat memori yang sama.



Operator Deference (*)

Simbol asterisk (*) selain digunakan sebagai perkalian juga bisa digunakan sebagai operator deference atau operator indirection, yang menunjuk pada objek (nilai) dari operannya.

Contoh:
int x=25;
in *p;
p=&x; // mengisikan alamat dari x ke dalam p

pernyataan:
count << *p << endl;
menampilkan nilai yang disimpan dalam ruang memori yang ditunjuk oleh p, yang merupakan nilai dari x.

perhatikan pernyataan dibawah ini:
int *p;
int    q;

Pada pernyataan diatas, p adalah variabel pointer dari tipe int dan q adalah variabel dari tipe int.  Diasumsikan bahwa lokasi memori 1200 dialokasikan untuk p dan lokasi memori 1800 dialokasikan untuk q.

Pernyataan:
q=78;
menyimpan 78 didalam q, yaitu di lokasi memori 1800.


Tipe String

String digunakan untuk merepresentasikan data yang berupa teks.  String merupakan urutan dari satu atau lebih karakter.  Dalam C++, string diapit oleh tanda petik dua.  Sebelum menggunakan tipe data string, program harus menyertakan header string seperti berikut:

#include <string>


Pernyataan:

string nama= "Algoritma 2";

mendeklarasikan nama menjadi variabel string dan menginisialisasikan nama ke "Algoritma 2".  Posisi dari karakter pertama, A, adalah 0; posisi karakter kedua, l, adalah 1; dst. Posisi dari karakter pertama pada variabel string dimulai dari 0, bukan 1.



C++

tipedata *nama_pointer; {deklarasi pointer null}
nama_pointer = (tipedata *) malloc(size_t size); { deklarasi pointer kosong}

Penjelasan:
  • tipedata adalah tipe dasar nilai yang berada di memori yang ditunjuk oleh pointer.
  • nama_pointer adalah nama variabel pointer.
  • (*) adalah operator memori yang fungsinya untuk mengembalikan nilai variabel pada alamatnya yang ditentukan oleh operand.
  • malloc(size_t size) adalah deklarasi pengalokasian memori kosong dengan ukurang kapasitas sebesar size


Contoh :

Algoritma (Pseodocode) :

p : pointer to integer
nilai : pointer to real
s : pointer to char



C++ :

int *p;
float *nilai;
char *s;



Mengakses dengan Pointer

Untuk mengakses nilai/isi pada memori yang ditunjuk oleh pointer dipakai simbol ‘*’

Contoh :
*p = 10;
*q = 20;


Pointer menunjuk memori yang ditunjuk pointer lain :

Contoh :
p = q;

berarti p menunjuk ke alamat memori yang ditunjuk oleh q, dan dengan demikian p dan q menunjuk alamat memori yang sama.


Contoh Program Pointer 1:

#include <iostream.h>
#include <alloc.h>
#include <stdlib.h>
void main()
{

int *p, *q;
p=(int *)malloc(sizeof(int));
q=(int *)malloc(sizeof(int));
*p=10;
*q=20;
cout<<"Isi info pointer :\n";
cout<<"*p = "<<*p<<endl;
cout<<"*q = "<<*q<<endl;
cout<<"\nAlamat register pointer :\n";
cout<<"p = "<<p<<endl;
cout<<"q = "<<q<<endl;
p=q;
cout<<"\nKondisi akhir isi info pointer :\n";
cout<<"*p = "<<*p<<endl;
cout<<"*q = "<<*q<<endl;
}

Hasil Program:
Isi info pointer:
*p = 10
*q = 20


Alamat register pointer:
p=0x212f01d2
q=0x212f01ca


Kondisi akhir isi info pointer:
*p = 20
*q = 20



Operator Pointer

Ada beberapa operator yang bisa digunakan dalam pointer, yaitu :
  1. Operator alamat (yang dilambangkan dengan symbol &)
  2. Operator unary yang mengembalikan alamat dari operandnya.

Pointer menunjuk variabel statis :
Misalkan px adalah variabel bertipe pointer yang akan berisi alamat variabel lain yang bertipe integer, maka dideklarasikan :

int x;
int *px;

Untuk mengatur pointer agar menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk.

Operator ‘&’ digunakan untuk menyatakan alamat variabel statis yang akan ditunjuk.

Contoh :
px = &x;

Jika suatu variabel statis sudah ditunjuk oleh pointer, isi variabel tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) atau melalui pointer (pengaksesan tidak langsung).

• Pengaksesan langsung dilakukan langsung oleh variabel statisnya (bukan pointernya).
Contoh :
x = 10

• Operator indirection (pengaksesan tidak langsung), berupa simbol ‘*’
Contoh :
*px = 10



Contoh Program Pointer 2:

#include<iostream.h>
main()
{ int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
cout << "\nvalue1 = " << value1;
cout << “\n*mypointer = " << *mypointer;
mypointer = &value2;
*mypointer = 20;
cout << "\nvalue2 = " << value2;
cout << "\n*mypointer = "<<*mypointer;
}


Keluaran:
value1 = 10
*mypointer = 10
value2 = 20
*mypointer = 20



Contoh program Pointer 3:

#include <iostream.h>
main()
{
int x,y; //x dan y bertipe int
int *px; //deklarasi px, pointer yang menunjuk obyek
//bertipe int
x=87;
px=&x; //px berisi alamat dari x
y =*px; //y berisi nilai yang ditunjuk px

cout<<"alamat x= "<<&x<<endl;
cout<<"nilai x= "<<x<<endl;
cout<<"alamat yang ditunjuk oleh px= "<<px<<endl;
cout<<"nilai yang ditunjuk oleh px= "<<*px<<endl;
cout<<"alamat y= "<<&y<<endl;
cout<<"nilai y= "<<y;
}


Keluaran:
alamat x = 0x301f2452
nilai x = 87
alamat yang ditunjuk oleh px=0x301f2452
nilai yang ditunjuk oleh px=87
alamat y= 0x301f2450
nilai y= 87





Posting Komentar untuk "Pointer pada Algoritma"