DOC : Makalah Pointer

BAB I
PENDAHULLUAN

A. Latar Belakang
Sesuatu fasilitas yang tersedia dalam C++ yang tidak ditemukan pada bahasa pemrogamanlainnya adalah pointer, dengan pemanfaatan pointer programmer dapat melakukanmanipulasi memori secara langsung.Pointer adalah sebuah objek yang dapat digunakan untuk mengakses objek lainnya.
Sebuah pointer menyediakan akses tidak langsung terhadap objek.Pada dasarnya manusia telah menggunakan pointer pada dunia nyata setiap saat.Sangat banyak contoh yang dapat kita lihat.Misalnya saja pada saat seorang dosen mengatakan, “Kerjakan Tugas 1.1 di buku,” telah terjadi penugasankepada mahasiswa secara tidak langsung.Contoh lainya adalah sebuah URL (Uniform Resource Locator), seperti http://www.sebarkan.comjuga merupakan sebuah pointer.URL tersebut memberitahukan lokasi halaman web tersebut.Jika halaman web pindah, makaURL tidak berlaku lagi dan menunjuk ke halaman yang sudah tidak ada.Oleh karena itu pengetahuan yang banyak tentang pointer akan sangat membantu bagi seseorang yang ingin mempelajari bahasa C/C++.

B. Rumusan Masalah
1. Apa Pengertian Pointer ?
2. Operator apa saja yang terdapat pada pointer ?
3. Bagaimanakah deklarasi dari sebuah pointer ?
4. Operasi-operasi apa saja yang terdapat pada pointer ?
5. Bagaimanakah contoh aplikasi dari pointer ?

C. Tujuan
1. Untuk mengetahui pengertian pointer.
2. Untuk mengetahui operator-operator yang terdapat pada pointer.
3. Untuk mengetahui bagaimana deklarasi dari sebuah pointer.
4. Untuk mengetahui operasi-operasi apa saja yang terdapat pada pointer.
5. Untuk mengetahui bagaimana contoh aplikasi dari pointer.

BAB II
PEMBAHASAAN

A. Pengertian Pointer
Pointer (penunjuk) adalah sebuah variabel yang digunakan sebagai penunjuk alamat dari variabel lain. Pointer disini berfungsi menyimpan alamat dari sebuah variabel dan dapat mengakses nilai yang ada di alamat tersebut, pointer dapat mengubah nilai, menampilkan nilai atau menampilkan alamat dari variabel yang disimpannya. Manusia menggunakan pointer pada dunia nyatasetiap saat. Mari kita lihat contohnya:
  • Pada saat seorang dosen mengatakan, “Lakukan Tugas 1.1 di buku,” telah terjadi penugasankepada mahasiswa secara tidak langsung.
  • Indeks yang terdapat pada akhir buku, merupakan petunjuk untuk menemukan penjelasanlengkap mengenai topik tertentu.
  • Alamat merupakan sebuah pointer. Alamat menunjukkan tempat tinggal seseorang.
  • Sebuah URL (Uniform Resource Locator), seperti http://www.sebarkan.comjuga sebuah pointer.URL tersebut memberitahukan lokasi halaman web tersebut. Jika halaman web pindah, makaURL tidak berlaku lagi dan menunjuk ke halaman yang sudah tidak ada. Pada C++ sebuah pointer adalah sebuah objek yang menyimpan sebuah alamat (contohnya lokasimemori) dimana terdapat data lain yang disimpan. Alamat memori merupakan integer, jadi sebuahpointer biasanya direpresentasikan dengan (unsigned) int. Yang membuat pointer lebih dari integer yangbiasa adalah kita dapat mengakses data yang ditunjuk oleh pointer tersebut.Sebuah aggregate adalah sekumpulan objek yang disimpan dalam satu unit. Array merupakanmekanisme dasar untuk menyimpan sekumpulan objek dengan tipe yang sama. Berbeda denganaggregate yang dapat menyimpan sekumpulan objek dengan tipe yang tidak sama. Sebagai contoh,bayangkan tata letak sebuah apartemen. Masing-masing lantai mempunyai lima kamar tidur, lobi, duakamar mandi. Dengan demikian, masing-masing lantai disimpan sebagai struktur dan bangunan adalahlantai dalam array.

B. Operator pada pointer
Operator pada pointer terbagi menjadi dua, yaitu :
a. Operator *
Operator * disebut operator Unary(hanya memerlukan satu operand saja) yang menghasilkan nilai variable dari suatu variabel alamat
b. Operator &
Operator & disebut Operator Unary (hanya memerlukan satu operand saja) yangmenghasilkan alamat darisuatu variabel.
c. Deklarasi Pointer
Sama seperti variabel, pointer juga harus dideklarasikan dahulu sebelum digunakan. Bentuk umum deklarasi pointer adalah sebagi berikut :
Type_data *nama_pointer;
Contoh : int *p;
Artinya : p adalah pointer to int. Int menyatakan tipe data yang ditunjuk oleh p. contoh lain dari pointer adalah

  • char *pstring;

  • float *pecah;

  • int *dodol;

Saat pointer dideklarasikan, dia tidak menunjuk kemanapun.Anda harus membuatnya menunjuk ke sesuatu sebelum digunakan.
Contoh :
seharusnya,
7 int *ip;
*ip = 100;//akan eror saat dijalankan
int *ip, i=100;
*ip = &i;

d. Operasi Pada Pointer
Variabel pointer dapat dioprasikan.oprasi pada pointer diantaranya adalah operasi assignment, operasi aritmatika dan operasi logika.
1. Operasi Assignment/penugasan
Suatu variabel pointer seperti halnya variabel lain, juga bisa mengalami operasi penugasan. Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.
Contoh_1 Operasi Assignment.
#include
void main()
{
floaty,*x,*z;
y=12.34;
x=&y;
z=x;//assignment antar variabel pointer
//berapakah nilai x?
//berapakah niali y?
}

Contoh_2 Operasi Assignment
#include
#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 "< cout<<"Nilai "<<*(penunjuk+1) <<" ada di alamat memori "< cout<<"Nilai "<<*(penunjuk+2) <<" ada di alamat memori "< getch();
}

2. Operasi Aritmatika
Variabel pointer dapat ditambah atau dikurangi dengan nilai integer.
Operasi penambahan dengan suatu nilai integer merupakan suatu peningkatan nilai pointer yang menunjukkan lokasi data berikutnya di memori.
Misalnya pointer X menyimpan alamat 1000, maka :
• Jika x adalah int, maka p++ akan menunjuk alamat 1002 (karena int berukuran 2 byte)
• Jika X adalah char, maka p++ akan menunjuk alamat 1001 (karena ukuran char adalah 1 byte)

Contoh_1Program Operasi Aritmatika
#include
void main()
{
int a[4]={10,20,30,40};
int *pa;
pa = a;
printf("pa = %d\n",pa);
printf("pa++ = %d\n",++pa);
}

#include
void main()
{
int a[4]={10,20,30,40};
int *p1,*p2;
p1 = &a[0];
p2 = &a[2];
printf("%d\n",p2-p1);

}

Contoh_2Operasi Arimatika
#include
#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 "< cout<<"Nilai "<<*(penunjuk+1) <<" ada di alamat memori "< cout<<"Nilai "<<*(penunjuk+2) <<" ada di alamat memori "< getch();
}

3. Operasi Logika
Dua variabel pointer dapat dibandingkan jika keduanya mempunyai type yang sama.
Contoh_1 Operasi Logika
#include
void main()
{
int bil1=100,bil2=100,*pb1,*pb2,*pb3;
pb1 = &bil1;
pb2 = &bil2;
pb3 = pb1;

if (pb1>pb2)
puts("Alamat pb1 lebih rendah deri pb2.");
else
puts("Alamat pb1 lebih tinggi dari pb2.");
if (pb1==pb3)
puts ("Alamat pb1 sama dengan pb3");
else
puts ("Alamat pb1 tidak sama dengan pb3");
}

Contoh_2 Operasi Logika
#include 'iostream.h'
#include "conio.h"
void main()
{
int a = 100, b = 200, *pa, *pb;
clrscr();
pa = &a;
pb = &b;
cout<<"nilai pa= "< if(pa < pb)
cout<<"pa menunjuk ke memori lebih rendah dari pb\n";
if(pa == pb)
cout<<"pa menunjuk ke memori yang sama dengan pb\n";
if(pa > pb)
cout<<"pa menunjuk ke memori lebih tinggi dari pb\n";
getch();
}

e. Contoh Aplikasi Pointer
Salah satu penggunaan pointer adalah untuk membuat suatu array yang dinamis (banyaknya data yang bisa ditampung sesuai keperluan). Sebagaimana kita ketahui jika kita membuat suatu program yang dapat menampung data nilai sebanyak 5 buah maka kita akan membuat suatu variabel array yang bertipe int dengan perintah int data[5]. Dengan cara begitu maka program hanya akan berjalan dengan baik jika data yang diinputkan banyaknya di kurang atau sama dengan 5 buah. Apa yang terjadi ketika data yang akan diinputkan ternyata 10 buah, maka langkah yang dilakukan adalah harus mengubah programnya dan mengganti int data[5] menjadi int data[10].
Cara lain untuk membuat program tersebut adalah dengan menggunakan suatu variabel array yang dinamis dimana pemesanan tempat yang diperlukan untuk menyimpan data tidak dideklarasikan dalam program tapi dilakukan secara runtime (ketika program berjalan).
01: #include 'stdio.h'
02: #include 'conio.h'
03: #include 'stdlib.h'
04: main()
05: {
06: int *data;
07: int i,banyakdata;
08: printf("Banyak data yang akan diinputkan : ");scanf("%i",&banyakdata);
09: data=(int *)malloc(sizeof(int)*banyakdata);
10: for(i=0;i 11: {
12: printf("Pemasukan data ke-%i :",i+1);scanf("%i",(data+i));
13: }
14: printf("Data yang telah diinputkan adalah : \n");
15: for(i=0;i 16: printf("Data ke-%i : %i\n",i+1,*(data+i));
17: getch();
18: return 0;
19: }

Tampilan yang dihasilkan oleh program diatas adalah sebagai berikut :


F. Bahaya Pointer

  • Bahaya yang mungkin ada dengan pointer sebagai moniker: memory leak, double delete, invalid memory access. Semuanya dapat dihindari dengan ownership analysis yang bagus (pada setiap saat, harus diketahui pihak mana yang bertanggung jawab mendelete sebuah object). Jika hal ini sulit dilakukan, misalnya karena shared ownership, anda dapat menggunakan smart pointer atau garbage collector

  • Bahaya yang mungkin ada dengan pointer sebagai iterator: array out of bound. Salah satu carayang efektif menghindari hal ini adalah dengan menggunakan standard algorithm.

  • Bahaya yang mungkin ada dengan pointer sebagai abstraksi fixed memory : Tidak tahu, tetapi ini bukan mainan sembarang programmer.
Bahasa Pemrograman tanpa pointer
  • Semua Bahasa pemrograman Fungsional, terutama yang murni , tidak mengenal pointer atau memerlukan pointer. Akan tetapi bahasa ini menggunakan model komputasi yang jauh berbeda, bukan abstract C machine.
  • Beberapa bahasa pemrograman dengan reference semantik dapat mengklaim mereka tidak memiliki pointer, akan tetapi setiap variabel sebenarnya adalah pointer. Secara fisik mungkin reference tidak memiliki struktur seperti pointer (biasanya merupakan data struktur yang lebih kompleks sehingga lebih friendly terhadap garbage collector) tapi reference tersebut memiliki fungsi yang mirip dengan pointer di C atau C++. Ada yang bilang bahwa reference dalam bahasa - bahasa ini menyebabkan optimasi lebih mudah karena tidak menyebabkan aliasing, tetapi optimasi tersebut juga mungkin dilakukan di C dan C++ ( dengan restrict pointer, sayangnya belum merupakan bagian dari standard C++).
BAB III
PENUTUP

A. Kesimpulan
Pada C++ sebuah pointer adalah sebuah objek yang menyimpan sebuah alamat (contohnya lokasi memori) dimana terdapat data lain yang disimpan. Alamat memori merupakan integer, jadi sebuah pointer biasanya direpresentasikan dengan (unsigned) int. Yang membuat pointer lebih dari integer yang biasa adalah kita dapat mengakses data yang ditunjuk oleh pointer tersebut. Operator pada pointer ada dua, yaitu operator* dan operator&. Pointer sama seperti variabel lain, harus dideklarasikan terlebih dahulu sebelum digunakan.
B. Saran
Saran kami selaku penulis makalah ini adalah apabila para pembaca ingin menggunakan makalah ini, kami sangat sarankan untuk mengambil materi dari sumber lain. Karena makalah yang kami buat ini jauh dari kata sempurna.

Related posts

Description: DOC : Makalah Pointer Rating: 4.5 Reviewer: Unknown ItemReviewed: DOC : Makalah Pointer
Al
Mbah Qopet Updated at: 11.43