About

Thursday, 5 January 2012

Praktikum strukdat pointer

 Praktikum
1
Pointer

A.    Tujuan


1.      Mengenal  Pointer.
2.      Mengetahui definisi variabel pointer.
3.      Mengetahui pointer void.
4.      Mengetahui operasi pointer.
5.      Mengetahui pointer dan string, pointer dan larik, pointer menunjuk pointer lain.
6.      Mahasiswa mengetahui dan memahami mengenai pointer serta pendeklarasiannya.

B.    Dasar Teori
Pengertian
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) didalam memori. Contoh, jika sebuah variabel berisi dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.

Mendefinisikan variabel pointer
Suatu variabel pointer didefinisikan dengan bentuk sebagai berikut :
Tipe_data *nama_variabel;
· tipe_data dapat berupa sembarang tipe seperti halnya pada pendefinisian variable bukan pointer.
· nama_variabel adalah nama variabel pointer.
Beberapa contoh pendifinisian variabel pointer :
int *pint // Pointer ke int
char *pch //Pointer ke char
float *pfl //Pointer ke float
variabel pointer pint dapat diatur agar menunjuk ke vint dengan cara sebagai berikut :
pint = &vint
Pernyataan di atas berarti : “pint diisi dengan alamat dari vint”. Operator & menyatakan “alamat dari”. Sekarang, marilah kita lihat program yang mendefiniskan variabel pointer, mengisinya dengan alamat suatu variabel dan menampilkan isi dari pointer.

Contoh program :
//Program pointer pertama
//Nama file ptr1.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int vint = 55;
int *pint;
pint = &vint;
cout<<"Alamat vint = "<<&vint<<endl;
cout<<"pint = "<<pint<<endl;
}

Pointer void
Pada bagian sebelumnya diberikan contoh variabel pointer yang menunjuk ke tipe data tertentu. Namun sebenarnya juga dimungkinkan untuk membuat pointer yang tak bertipe. Caranya yakni dengan meletakkan kata kunci void pada bagian penentu tipe pointer,
Contoh :
void *ptr;
Merupakan pernyataan untuk mendefinisikan ptr sebagai variabel pointer void. Suatu pointer void adalah pointer yang dapat menunjuk ke sembarang tipe data. Misalnya, Anda dapat mengatur agar pointer ini menunjuk ke tipe data int, tetapi di saat lain diperlukan untuk menunjuk data bertipe float.
Catatan : selain pointer void juga terdapat istilah pointer null. Pointer null mempunyai makna yang berbeda dengan pointer void. Pointer null adalah pointer yang beris nol (NULL).

Contoh program
//Program pointer void
//Nama file void.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
void *ptr; //pointer tak bertipe
int vint = 50;
float vfl = 51.5;
ptr = &vint; //menunjuk ke int, diperkenankan
cout<<"Nilai yang ditunjuk oleh ptr : "<<*(int*)ptr<<endl;
ptr = &vfl; //menunjuk ke float, diperkenankan
cout<<"Nilai yang ditunjuk oleh ptr : "
<<*(float *)ptr<<endl;
}

Operasi Pointer
Operasi Penugasan
Suatu variabel pointer seperti hanya variabel yang lain, juga bisa mengalami operasi penugasan. Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.

Contoh program :
//Program penugasan pointer
//Nama file tugas.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
float *x1,*x2,y;
y = 13.45;
x1 = &y;
x2 = x1;
cout<<"Nilai variabel y = "<<y<<" ada di alamat "<<x1<<endl;
cout<<"Nilai variabel y = "<<y<<" ada di alamat "<<x2;
getch();
}

Operasi Aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan. Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (indeks selanjutnya) dalam memori. Begitu juga operasi penguranganya.
Contoh program :
//Program pointer aritmatika
//Nama file arit.cpp
#include "iostream.h"
#include "conio.h"
void main()
{
int nilai[3], *penunjuk;
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk<<" ada di alamat"<<penunjuk<<endl;
cout<<"Nilai "<<*(penunjuk+1)<<" ada di alamat"<<(penunjuk+1)<<endl;
cout<<"Nilai "<<*(penunjuk+2)<<" ada di alamat"<<(penunjuk+2)<<endl;
getch();
}


Operasi Logika
Suatu pointer juga dapat dikenai operasi logika.
//Program aritmatika pointer
//Nama file arit.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int a = 100, b = 200, *pa,*pb;
clrscr();
pa = &a;
pb = &b;
if(pa<pb)
cout<<"pa menunjuk ke memori lebih rendah daripb"<<endl;
if(pa==pb)
cout<<"pa menunjuk ke memori sama dengan pb"<<endl;
    if(pa>pb)
cout<<"pa menunjuk ke memori lebih tinggi dari pb"<<endl;
getch();
}

Pointer dan String
Contoh hubungan pointer dan string ditunjukkan oleh program berikut :
#include "stdio.h"
#include "conio.h"
char *nama1 = "SPIDERMAN";
char *nama2 = "GATOTKACA";
void main()
{
//char namax;
puts("SEMULA :");
printf("Saya suka >>%s\n ",nama1);
printf("Tapi saya juga suka >>%s\n ",nama2);
printf("SEKARANG : ");
printf("Saya suka >>%s\n ",nama1);
printf("Dan saya juga masih suka>>%s\n ",nama2);
getch();
}
Pada contoh di atas :
Char *nama1 = “SPIDERMAN”;
Char *nama2 = “GATOTKACA”;
Akan menyebabkan C++ :
· mengalokasikan nama1 dan nama2 sebagai variabel pointer yang menunjuk ke data bertipe char dan menempatkan konstanta string “SPIDERMAN” dan “GATOTKACA” ke suatu lokasi di memori komputer.
· Kemudian nama1 dan nama2 akan menunjuk ke lokasi string “SPIDERMAN” dan “GATOTKACA”.

Pointer dan Larik
Pointer dan larik mempunyai hubungan yang dekat. Secara internal larik juga menyatakan
alamat. Misalnya, didefinisikan :
int tgl_lahir[] = {24, 6, 1965};
dan :
int *ptgl;
agar ptgl menunjuk ke larik, diperlukan pernyataan berupa :
ptgl = tgl_lahir;
Perhatikan dengan seksama pernyataan di atas. Tidak ada tanda & di depan menggunakan
format :
ptr = &variable

Bila variabel bukan larik. Ini disebabkan nama larik sebenarnya sudah menyatakan alamat. Oleh karena itu tanda & tidak diperlukan.

Contoh program :
//Program pointer dan larik
//Nama file ptrlar.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int tgl_lahir[] = {24, 6, 1965};
int *ptgl;
ptgl = tgl_lahir;
cout<<"Nilai yang ditunjuk oleh ptgl : "
<<*ptgl<<endl;
cout<<"Nilai dari tgl_lahir[0] : "
<<tgl_lahir[0]<<endl;
}
//Program mengakses elemen larik melalui pointer
//ptrlar2.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int tgl_lahir[] = {24, 6, 1965};
int *ptgl;
ptgl = tgl_lahir; //ptgl menunjuk ke
//elemen pertama dari larik
for(int i = 0; i < 3; i++)
{
cout<<"ptgl = "<<ptgl<<endl;
cout<<"*ptgl = "<<*ptgl<<endl;
ptgl++; //menunjuk ke elemen berikutnya
}
}

Pointer Menunjuk Pointer
Suatu pointer bisa saja menunjuk ke pointer lain. Gambaran mengenai hal ini ditunjukkan
pada gambar 1 di bawah
Untuk membentuk rantai pointer seperti gambar 1 diperlukan pendifinisian sebagai berikut :
int var_x;
int *ptr1; // satu tanda * di depan ptr1
int **ptr2; // dua tanda * di depan ptr2

Pada pendifinisian di atas :
· var_x adalah variabel bertipe int.
· ptr1 adalah variabel pointer yang menunjuk ke data bertipe int.
· ptr2 adalah variabel pointer yang menunjuk ke pointer int.
agar ptr1 menunjuk ke variabel var_x, perintah yang diperlukan berupa :
ptr1 = &var_x; sedangkan supaya ptr2 menunjuk ke ptr1, diperlukan perintah berupa :
ptr2 = &ptr1;

Contoh program yang memberikan gambaran pengaksesan nilai pada var_x melalui pointer ptr1 dan ptr2 dapat dilihat di bawah ini.
//Program pointer yang menunjuk ke pointer lain
//Nama file ptrptr.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int var_x = 273;
int *ptr1; //Pointer ke variabel bukan pointer
int **ptr2; //Pointer ke pointer
cout<<"var_x = "<<var_x<<endl;
//Penugasan Alamat
ptr1 = &var_x; //ptr1 menunjuk ke var_x
ptr2 = &ptr1; //ptr2 menunjuk ke ptr1
//Mengakses nilai var_x melalui ptr1
cout<<"*ptr1 = "<<*ptr1<<endl;
//Mengakses nilai var_x melalui ptr2
cout<<"**ptr1 = "<<**ptr2<<endl;
}


C.     Latihan
1. Apa yang dimaksud dengan pointer ?
2. Apa persamaan larik dengan pointer ?
3. Jelaskan jenis data dari definisi berikut :
a. float *measures[250];
b. int *volume[50];
4. carilah kesalahannya.
Jika diberikan definisi variabel
int i;
long int j;
int *ip1;
int *ip2;
5. Mengapa berikut ini tak akan bekerja ?
ip1 = &i;
jp2 = &j;
6. Tuliskan program yang menyimpan nama-nama bahan pokok makanan dalam larikpointer karakter. Tampilkan nama-nama bahan pokok makanan tersebut !

No comments :

Post a Comment