Senin, 28 Februari 2011

POINTER

Pointer adalah variable yang berisi alamat memory sebagai nilainya dan berbeda dengan variable biasa yang berisi nilai tertentu. Dengan kata lain, pointer berisi alamat dari variable yang mempunyai nilai tertentu. Dengan demikian, ada variabel yang secara langsung menunjuk ke suatu nilai tertentu, dan variabel yang secara tidak langsung menunjuk ke nilai. Adapun bentuk umum dari pernyataan variabel pointer dalam C++ adalah :
Type *variabel-name Dengan :
• Type adalah tipe dasar pointer
• Variabel name adalah nama variabel pointer
• * adalah variabel pada alamatnya yang ditentukan oleh operand.
Contoh :
Int *int_pointer; // pointer to integer
Float *float_pointer; // pointer to float
Contoh :
//Program : pointer.cpp
#include
main()
{
int a, *b;
a=20;
b=&a;
printf (" Pointer b menunjukkan alamat =%p\n",b);
printf (" Alamat tersebut berisi nilai :%d\n",*b);
}
//Program : pointer1.cpp
#include
// cetak p dan *p
void main(void)
{
int v = 7, *p;
p = &v;
cout << " Nilai v = " << v << " dan *p = " << *p
<< "\nAlamatnya = " << p << '\n';
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut :
Nilai v = 7 dan *p = 7
Alamatnya = efffb24
Modul 3 Struktur Data (Arie) - 2
//Program:pointer2.cpp
#include
int main ()
{
int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << "value1==" << value1 << "/ value2==" << value2;
return 0;
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut :
“value1==” 10 << “/ value2==20
OPERATOR POINTER
Ada beberapa operator yang bisa digunakan dalam pointer. Operator tersebut
adalah operator alamat (yang dilambangkan dengan simbol &) dan operator
unary yang mengembalikan alamat dari operandnya.
Sebagai contoh, diasumsikan deklarasi sebagai berikut :
Int y = 5;
Int *yPtr;
Maka pernyataan :
YPtr = &y;
Pernyataan ini mengandung arti bahwa alamat dari variabel y ditujukan kepada
variabel pointer yPtr.
Contoh lain :
Int balance, value;
Int *balptr;
Balance = 3200; // step 1
Balptr=&balance; // step 2
Value=*balptr; // step 3
Contoh diagram :
Step 1 Step 2 Step 3
12 Balptr 12 100 Balptr 12 100 Balptr
100 3200 Balance 100 3200 Balance 100 3200 Balance
130 value 130 value 130 3200 value
Modul 3 Struktur Data (Arie) - 3
Contoh :
//Program:pointer3.cpp
#include
int main()
{
int *ptr, num; // Step 1
ptr = # // Step 2
*ptr = 100; // Step 3
cout << num << " ";
(*ptr)++; // Step 4
cout << num << " ";
(*ptr)*=2; // Step 5
cout << num << "\n";
return 0;
}
Bila program dijalankan :
100 101 202
Contoh diagram :
Step
1
Step
2
Step
3
Step
4
Step
5
12 *int Ptr 12 50 Ptr 12 50 Ptr 12 50 Ptr 12 50 Ptr
50 int num 50 int num 50 100 num 50 101 num 50 202 num

... ... ... ... ...

EKSPRESI POINTER
Pointer Aritmatika
Hanya 4 operator aritmatik dapat digunakan pada pointer ++, = =, +, dan -.
Asumsi integer 32 bit.
Contoh :
Int *p1;
p1++;
p1--;
Contoh :
//Program:pointer4.cpp
#include
int main()
{
int i[10], *i_ptr;
double f[10], *f_ptr;
int x;
i_ptr = i; // i_ptr points to first element of i
Modul 3 Struktur Data (Arie) - 4
f_ptr = f; // f_ptr points to first element of f
for(x=0; x<10; x++)
cout << i_ptr+x << " " << f_ptr+x << "\n";
return 0;
}
Bila program dijalankan :
0xeffffd9c 0xeffffd48
0xeffffda0 0xeffffd50
0xeffffda4 0xeffffd58
0xeffffda8 0xeffffd60
... ...
Pointer Perbandingan
Pointer dapat dibandingkan dengan menggunakan operator hubungan, seperti
!=, ==, <, dan >.
Contoh :
//Program:pointer5.cpp
#include
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;
}
Data yang akan dimasukkan sebanyak 9 buah data dan program tidak akan
berhenti apabila belum sampai 9 buah data.
POINTER VERSUS ARRAY
Array dan pointer adalah dua struktur data yang saling berkaitan satu dengan
yang lain dalam C, dan dapat saling dipertukarkan penggunaannya. Karena
array dapat didefinisikan sebagai pointer.
Contoh :
int *bPtr, b[5];
Dapat dibuat menjadi :
bPtr = b;
bPtr = &b[0];
Berarti bPtr ditugaskan untuk menunjukkan ke alamat elemen pertama dari
array b atau b[0].
Elemen array b[3] dapat ditulis :
* (bPtr + 3)
Modul 3 Struktur Data (Arie) - 5
Alamat &b[3] dapat ditulis :
bPtr +3
Deklarasi suatu variabel array x[] yang berisi nilai int dapat ditulis :
int *x;
Variabel array ganda dapat ditulis :
int y [ ] [ ];
int *y [ ];
int *( *y);
Penggunaan pointer dan array untuk deklarasi variabel array ganda untuk
menyimpan empat buah elemen yang masing-masing bertipe string (array dari
karakter).
char *suit [4] = { “Hearts”, “Diamonds”, “Clubs”, “Spades” };
Contoh :
//Program:pointer6.cpp
#include
#include
int main()
{
char str[80];
char token[80];
char *str_ptr, *tk_ptr;
cout << "Masukkan sebuah kalimat : ";
gets(str);
str_ptr = str;
while(*str_ptr) {
tk_ptr = token;
while( *str_ptr != ' ' && *str_ptr ) {
*tk_ptr = *str_ptr;
tk_ptr++;
str_ptr++;
}
if(*str_ptr) str_ptr++;
*tk_ptr = '\0';
cout << token << endl;
}
return 0; }
//Program:pointer7.cpp
#include
#include
int main()
{
char str[80];
char token[80];
int i, j;
cout << "Masukkan sebuah kalimat: ";
gets(str);
for(i=0; ; i++) {
for(j=0; str[i] != ' ' && str[i]; j++, i++)
token[j] = str[i];
Modul 3 Struktur Data (Arie) - 6
token[j] = '\0';
cout << token << '\n';
if(!str[i]) break;
}
return 0;
}
Pada contoh program pointer 6 adalah program dengan pointer, sedangkan
contoh program pointer 7 dengan menggunakan array. Hasil dari kedua program
tersebut sama.
POINTER INDEX
Pointer tidak hanya dapat digunakan untuk mengakses elemen array, tetapi
pointer juga dapat diindex seperti pada array.
Contoh :
//Program:pointer8.cpp
#include
#include
int main()
{
char str[20] = "hello tom";
char *p;
int i;
p = str;
for(i=0; p[i]; i++)
p[i] = toupper(p[i]);
cout << p;
return 0;
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut :
HELLO TOM
Proses pengindexan pointer dapat dilihat pada variabel p yang menunjuk pada
variabel str yang berisi data nama dengan panjang 20. Fungsi toupper
memperjelas proses pengindexan.
KONSTANTA STRING DAN POINTER
Konstanta string terlihat dalam program teks dan disimpan dalam tabel string
serta setiap entry dalam tabel string, pointer string dibangkitkan.
Contoh :
//Program:pointer9.cpp
#include
int main()
{
char *s;
s = "Pointers are fun to use.\n";
cout << s;
return 0;
}
Modul 3 Struktur Data (Arie) - 7
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut :
Pointers are fun to use.
ARRAY POINTER
Pointer dapat diarraykan seperti tipe data yang lain dalam C++. Untuk
menyatakan sebuah array pi dari pointer sebanyak 10 buah data yang bertipe
10 integer, dapat ditulis :
int *pi [10];
Untuk menentukan alamat dari variabel integer disebut var ke elemen ketiga
dari pointer array, dapat ditulis :
int var;
pi [2] = &var
Contoh :
//Program:point10.cpp
#include
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;
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut :
10, 20, 30, 40, 50,
POINTER DALAM POINTER
C++ memperbolehkan penggunaan pointer dalam pointer yang berisi data yang
sama atau berbeda. Dalam kondisi pointer biasa atau pointer tunggal,
diagramnya adalah :
Pointer Variabel
Untuk pointer dalam pointer, diagramnya adalah :
Pointer Pointer Variabel
Contoh :
char a;
char *b;
char **c;
address value
address address value
Modul 3 Struktur Data (Arie) - 8
a = ‘z’;
b = &a;
c = &b;
Dengan misal data acak pada memori 7230, 8092, dan 10502, maka diagramnya
adalah :
a b c
7230 8092 10502
Dari diagram dapat disimpulkan :
• c adalah sebuah variabel dengan tipe (char**) yang berisi 8092
• *c adalah sebuah variabel dengan tipe (char*) yang berisi 7230
• **c adalah sebuah variabel dengan tipe (char) yang berisi ‘z’
Contoh :
//Program:point12.cpp
#include
#include
#include
int main()
{
int x, *p, **q;
x = 10;
p = &x;
q = &p;
cout << **q; // prints the value of x
return 0;
}
Bila program diatas dijalankan, maka hasilnya adalah sebagai berikut :
10

2 komentar: