Kamis, 29 Oktober 2009

Tugas Struktur Data3

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua(RE)

Operator Pointer ada dua, yaitu :
=> Operator & Operator & bersifat unary (hanya memerlukan satu operand saja).
Operator & menghasilkan alamat dari operandnya.
=> Operator * Operator * bersifat unary (hanya memerlukan satu operand saja).
Operator * menghasilkan nilai yang berada pada sebuah alamat.

2 DEKLARASI POINTER
Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.(RE)
Bentuk Umum :
Tipe_data *nama_pointer;

//Contoh9_1
int *px;
char *sh;
Contoh Program :
#include “IOSTREAM.h”
#include “conio.h”
void main()
{ int x, y; /* x dan y bertipe int */
int *px; /* px pointer yang menunjuk objek */
clrscr();
x = 87;
px = &x; /* px berisi alamat dari x */
y = *px; /* y berisi nilai yang ditunjuk px */
cout<<“Alamat x =”<<&x <<\n”; cout<<“Isi px = \n”, px); cout<<“Isi x = \n”, x); cout<<“Nilai yang ditunjuk oleh px = \n”, *px); cout<<“Nilai y = \n”, y); getch(); } 3 OPERASI POINTER
Operasi Penugasan Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain.(RE) //Contoh9_2 #include "iostream.h" #include "conio.h" void main() { float *x1,y, *x2; clrscr(); y = 13.45; x1 = &y; /* Alamat dari y disalin ke variabel x1 */ x2 = x1; /* Isi variabel x1 disalin ke variabel x2 */ cout<<"Nilai variabel y = "<<< " ada di alamat "<< y =" "><< " ada di alamat "<<>
#include
void main()
{ int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk <<" ada di alamat memori " <<<"\n"; cout<<"Nilai "<<*(penunjuk+1) <<" ada di alamat memori " <<<"\n"; cout<<"Nilai "<<*(penunjuk+2) <<" ada di alamat memori " <<<"\n"; getch(); } Operasi Logika Suatu pointer juga dapat dikenai operasi logika. //Contoh9_4 #include #include "conio.h" void main() { int a = 100, b = 200, *pa, *pb; clrscr(); pa = &a; pb = &b; cout<<"nilai pa= "<<< " nilai pb= "<<<"\n"; if(pa < pa ="="> pb)
cout<<"pa menunjuk ke memori lebih tinggi dari pb\n"; getch();}
4 POINTER DAN STRING
//Contoh9_5 (RE)
#include
#include
void misteri1(char *);
void main() {
char string[] = "amikom";
cout<< "String sebelum proses adalah " << void="" char="" while="" if="" s="">= 'a' && *s <= 'z' ) *s -= 32; ++s; } }

5 POINTER MENUNJUK SUATU ARRAY

//Contoh9_6
#include "iostream.h" #include "conio.h" void main() { static int tgl_lahir[] = { 13,9,1982 }; int *ptgl; ptgl = tgl_lahir; /* ptgl berisi alamat array */ cout<<"Diakses dengan pointer\n"; cout<<"Tanggal = "<< *ptgl<<"\n"; cout<<"Bulan = "<< *(ptgl + 1) <<"\n"; cout<<"Tahun = "<<*(ptgl + 2) <<"\n"; cout<<"\nDiakses dengan array biasa\n"; cout<<"Tanggal = "<< bulan = "<< tgl_lahir[1] <<" tahun = "<< tgl_lahir[2] <<" p =" x;" k="0;">

Pointer dan Memori Dinamis

Digunakan untuk mengetahui alamat memori yang ditempati oleh suatu variabel.(RE)

contoh 1:
#include
#include
main() {

int x;
x=5;
cout<<"Nilai x="< x ="" int =""> *a;

Perbedaan Pointer dengan Variabel Biasa :
Pointer
Alamat memori => Tidak otomatis
Mengetahui alamat memori => a
Mengetahui datanya => *a

Variabel biasa (bukan pointer)
Deklarasi variabel => int b;
Alamat memori => Otomatis
Mengetahui alamat memori => &b
Mengetahui datanya => b(RE)

contoh :
Perhatikan Pernyataan berikut,
int b;
b=5;
intruksi di atas benar, karena pada saat b dideklarasikan, otomatis dialokasikan spase di memori.(RE)

Perhatikan pula pernyataan berikut,
int *a;
*a=7;
instruksi di atas tidak diperbolehkan, karena pointer tidak otomatis disediakan space di memori, maka kita tidak dapat langsung menggunakannya untuk menyimpan data.
sehingga, sebelum pointer tersebut digunakan untuk menyimpan data, harus dicarikan dahulu space di memori.(RE)

Ada dua cara yang dapat dilakukan untuk alokasi space di memori bagi pointer, yaitu:
1. Menempati space variable lain yang sudah punya space.
2. Dialokasikan tersendiri.

Menempati space variabel lain.
Variabel lain tersebut dapat berupa variabel biasa (bukan pointer) atau pointer yang tentunya sudah punya alokasi space di memori.(RE)
Syntaxnya :
var_pointer = &var_biasa;

Contoh 2:
#include
#include
main() {
int x,*y;
y=&x;
x=5;
cout<<"Nilai x = "< x = "<<&x; cout<<" y = "<<*y; cout<<" y = "<<*y; getch(); } Karena *y menempati alokasi memori yang sama dengan x, akibatnya data yang tersimpan di dalamnyapun akan sama. Jika ada instruksi yang menginisialisasi x, otomatis juga akan menginisialisasi *y. Contoh 3 : #include #include main() { int x,*y; y=&x; x=5; *y=10; cout<<" x = "< cout<<" x = "<<&x; cout<<" y = "<<*y; cout<<" y = "< getch(); } Demikian juga, jika ada instruksi yang menginisialisasi *y, maka akan otomatis pula menginisialisasi nilai x. Coba anda pikirkan output dua contoh program berikut ini : < n2 = ">< p = "<<*p; getch(); } < n2 = ">< p1 = "<<*p1; cout<<" p2 = "<<*p2; getch(); } Alokasi space tersendiri di memori (Memori dinamis). Pointer tidak menempati space variabel lain, tetapi dialokasikan space tersendiri di memori dengan instruksi new. Syntaxnya: var_ponter = new tipe_data-pointernya; Contoh : int *a; float *x; a=new int; x=new float; Perhatikan Contoh 6 yang dimodifikasi dari Contoh 3 sebelumnya. < x = "><<&x; cout<<" y = "<<*y; cout<<" y = "< style="" nilai="" x="">cout<<" nnilai="" nalamat="" memori="" yang="" ditempati="" y="<<*y; cout<<" nsetelah="" di="" delete="">
cout<<"\nNilai y = "<<*y;
cout<<"\nAlamat memori yang ditempati y = "<
getch();
}
Perhatikan Contoh 7 diatas. Setelah dikenai instruksi delete y; maka nilai yang tersimpan dalam *y akan hilang. Itulah sebabnya *y dikatakan sebagai variable dinamis, sedangkan x merupakan variable statis, sehingga tidak bisa dibebaskan dari memori.(RE)

Tidak ada komentar: