Langsung ke konten utama

POINTER PADA PEMROGRAMAN C++

pointer

pengertian pointer

Pointer adalah penunjuk suatu variabel. Karena menunjuk suatu variabel, maka pointer wajib memiliki alamat dari variabel yang ditunjuknya. Kadangkala dalam program yang besar, penghematan memori wajib untuk dilakukan. Dengan mekanisme copy dan paste nilai variabel satu kedalam variabel lain, akan sangat memboroskan memori. Dengan mekanisme pointer, suatu variabel dalam suatu fungsi dapat diakses oleh fungsi yang lain.

Cara membuat 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: }


Maka hasil outputnya adalah sebagai berikut:
Banyak data yang akan diinputkan : 5
Pemasukan data ke-1 :12
Pemasukan data ke-2 :3
Pemasukan data ke-3 :4
Pemasukan data ke-4 :5
Pemasukan data ke-5 :67
Data yang telah diinputkan adalah :
Data ke-1 : 12
Data ke-2 : 3
Data ke-3 : 4
Data ke-4 : 5
Data ke-5 : 67

Operator pointer
1. Address-of Operator(&) adalah operator yang digunakan untuk mendapatkan atau melihat alamat memori yang dimiliki oleh variabel tersebut. Cara menggunakannya adalah dengan meletakkan tanda '&' pada depan identitas saat pemanggilan variabel. Lokasi variabel akan ditentukan otomatis oleh kompiler dan operating system pada saat run-time.
#include <iostream>
using namespace std;
int main(){
int a = 5;
cout<<"Alamat Variabel a adalah :"<<&a<<endl;
cout<<"Nilai Variabel a adalah :"<<a<<endl;
return 0;
}
Hasil output programnya adalah:

deference
2.  Dereference Operator(*) adalah operator yang digunakan untuk mengakses nilai yang tersimpan secara langsung dengan memberikan awalan arterisk '*' pada identifier pointer. Sama dengan simbol Address-of Operator, peletakkan simbolnya diletakkan diawal variabel.
#include <iostream>
using namespace std;
int main(){
int a=5; //Memberikan nilai 5 pada variabel a
int *b; //Mendeklarasikan variabel b sebagai pointer
b = &a; //Mengkopikan alamat variabel a kedalam variabel pointer b
cout<<"Nilai variabel a adalah "<<a<<endl;
cout<<"Alamat variabel a adalah "<<&a<<endl;
cout<<"Isi dari variabel b adalah "<<b<<endl;
cout<<"Nilai yang tertampung dalam variabel b adalah "<<*b<<endl;
return 0;
}


Hasil output programnya adalah:
reference




Pointer dan array
Tahukah kamu bahwa jika kamu menuliskan sebuah array tanpa tanda kurung kotak ([]) maupun indeksnya, maka array tersebut menunjuk atau bersi alamat elem pertama dari array tersebut. Misalkan kamu membuat sebuah pointer bertipe int dengan nama pointerArray dan sebuah array dengan tipe yang sama yaitu int dengan nama nilaiArray, maka pemberian nilai berikut sah dan dapat dilakukan:
int *pointerArray;
int nilaiArray[5];
pointerArray = nilaiArray; //memberikan alamat elemen pertama array pada variabel pointer

Dari sintaks di atas, variabel pointer dengan nama pointrArray sekarang menunjuk pada alamat memori elemen pertama array dengan nama nilaiArray. Nah secara tidak langsung kita dapat mengakses nilai elemen array dengan menggunakan variabel pointer. Berikut Mimin contohkan sintaks pemrogramannya:
#include <iostream>
using namespace std;
int main(){
int nilaiArray[5] = {2,5,4,6,7};
int *pointerArray;
pointerArray = nilaiArray;
cout<<"Nilai pada elemen 0 nilaiArray adalah = "<<nilaiArray[0]<<endl;
cout<<"Nilai pada elemen 0 nilaiArray (Pointer) adalah = "<<*pointerArray<<endl;
pointerArray++; // naikan alamat yang ditunjuk pointer sejauh 1 integer
*pointerArray = 10; //Ubah nilai elemen 1 array (nilaiArray) menjadi 10
cout<<"Nilai pada elemen 1 nilaiArray adalah = "<<nilaiArray[1]<<endl;
cout<<"Nilai pada elemen 1 nilaiArray (Pointer) adalah = "<<*pointerArray<<endl;
pointerArray = nilaiArray; //kembalikan pointer pada elemen pertama
cout<<endl;
cout<<"Akses nilai semua array dengan pointer dan looping for"<<endl;
for (int i=0; i<5; i++){
 cout<<"Nilai indeks ["<<i<<"] adalah = "<<*(pointerArray+i)<<endl;
}
return 0;
} 
Hasil output programnya adalah sebagai berikut:
array dan pointer2
Dari hasil di atas, dapat kamu lihat bagaimana cara mengakses nilai array dengan menggunakan pointer.
Suatu pointer bertipe int hanya dapat digunakan untuk menunjuk pada variabel int. Sebab, tipe data tersebut akan menentukan sifat pointer ketika alamat pointer tersebut dilakukan increment. Begitu juga untuk tipe data yang lain.
Pointer sebagai parameter fungsi 
Seperti halnya dengan array, pointer dapat digunakan sebagai parameter suatu fungsi. Karena sifat pointer yang hanya sebagai penunjuk, maka setiap perubahan yang terjadi pada parameter, sebenarnya terjadi pada variabel yang ditunjuk bukan pada variabel pointer. Berikut Mimin contohkan program sederhananya:

#include <iostream>
using namespace std;
void tambah(int *angka){
*angka +=20;
}
int main(){
int nilai = 10;
cout<<"Nilai variabel nilai adalah = "<<nilai<<endl;
tambah(&nilai); //Memasukkan alamat variabel nilai pada fungsi tambah
cout<<"Nilai variabel nilai adalah = "<<nilai<<endl;
return 0;
}




Berikut adalah output programnya:
pointer_parameter
Pada program diatas, Mimin membuat fungsi tambah, dimana ketika alama suatu variabel diberikan sebagai parameter fungsi, nilai 20 akan ditambahkan pada alamat tersebut. Perbedaan parameter berupa pointer dan non-pointer adalah, pada variabel non-pointer, ketika kamu ingin memasukkan nilai pada sebuah variabel kedalam parameter, kamu harus memasukkan nilai dari variabel tersebut. Untuk parameter berupa pointer, kamu cukup memasukkan alamat variabel yang menampung nilai dengan operator (&) kedalam parameter fungsi
Yang menarik adalah pada fungsi tambah di atas, walaupun fungsi tersebut merupakan fungsi void tanpa nilai kembalian alias return, namun nilai variabel parameter berubah.


DAFTAR PUSAKA


Yuliana. Praktikum 1 Array, Pointer dan Struktur. Diakses pada tanggal 16 Februari 2019 pukul 20:29 WITA dari http://yuliana.lecturer.pens.ac.id/Struktur%20Data%20C/Prak%20SD%20-%20pdf/Praktikum%201.pdf




Komentar

Postingan populer dari blog ini

ALGORITMA DAN PEMOGRAMAN2

SEARCING 1.       Linked List   Secara umum search dapat diartikan mencari data dengan cara menelusuri tempat penyimpanan data tersebut. Tempat penyimpanan data dalam memory dapat berupa array atau dapat juga dalam bentuk Linked List. Pencarian dapat dilakukan terhadap data yang secara keseluruhan berada dalam memory komputer ataupun terhadap data yang berada dalam penyimpanan eksternal (hard disk). 2.       Pengertian Searching Searching adalah mencari data yang dibutuhkan. Searching dalam pemrograman bisa dilakukan untuk mencari data yang ada di dalam memory komputer, dalam kehidupan sehari-hari kita juga sering melakukan kegiatan searching seperti mencari data/informasi yang ada dalam internet. Terdapat beberapa metode yang dapat digunakan untuk searching , ada yang dinamakan: ·   Sequential Search ·   Binary Search 3.       Sequential Search Sequential Search merupakan metode pencarian data dalam array dengan cara membandingkan data yang dicari den

QUEUE/ANTRIAN PADA PEMROGRAMAN C++

                                                              QUEUE/ANTRIAN  penjelasan queue/ antrian kaidah utama dalam konsep queue adalah fifo yang merupakan singkatan dari first in first out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka datatersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan antrian di sebuah loket pembelian tiket kereta, orang yang lebih dahulu, maka akan dilayani terlebih dahulu, dan akan selesai lebih dulu dari orang-orang yang datang setelahnya. Gambar dibawah ini mengilustrasikan kerja sebuah queue.               operasi- operasi sebagai berikut    1. enqueue memasukan data ke dalam antrian  2. dequeue mengeluarkan data terdepan dari antrian  3. clear menghapus seluruh antrian   4. isempty memeriksa apakah antrian kosong  5. isfull memeriksa apakah antrian penuh   Deklarasi queue dalam program         sebuah queue di dalam program komputer dideklarasikan sebagai sebu

STRUCT ARRAY PADA PEMROGRAMAN C++

                                                            STRUCT ARRAY Setiap tipe data dapat dibuat dalam bentuk array. Begitu juga dengan tipe data yang dibuat dengan perintah struct. Contoh program di bawah ini dapat menjelaskan cara penggunaan array yang bertipe data buatan. Berikut contoh Program Sederhana ‘array di dalam struct’. Disini saya menggunakan tools Borland C++ . Script : /*contoh program sederhana ‘array di dalam struct’*/ #include “stdio.h” #include “conio.h” #include “string.h” #define maks 3 struct TMhs { char NIM[9]; char Nama[21]; int NilaiUTS,NilaiUAS,NilaiQuis; float NilaiAkhir; char index; }; main () { TMhs mhs[maks]; int i; for(i=0;i<maks;i++) { printf(“Pengisian Data Mahasiswa Ke-%i \n”, i+1); printf(“NIM : “);fflush(stdin);gets(mhs[i].NIM); printf(“NAMA : “);fflush(stdin);gets(mhs[i].Nama); printf(“Nilai Quiz : “);scanf(“%d”,&mhs[i].NilaiQuis); printf(“Nilai UTS : “);scanf(“%d”,