• Tidak ada hasil yang ditemukan

PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer

N/A
N/A
Protected

Academic year: 2021

Membagikan "PERTEMUAN VI POINTER 6.1 Tujuan Praktikum 6.2 Teori Penunjang Pointer"

Copied!
6
0
0

Teks penuh

(1)

PERTEMUAN VI

POINTER

6.1 Tujuan Praktikum

Praktikan mengenal type data Pointer, mengerti tentang konsep dasar dari pointer, dapat mendeklarasikan pointer di Pascal serta dapat menggunakannya di dalam sebuah program. Mengerti tentang pembuatan array dengan menggunakan pointer, serta tahu cara mengalokasikan dan mende-alokasikan suatu variabel didalam sebuah program.

6.2 Teori Penunjang

Pointer adalah suatu variabel yang menunjuk ke alamat memory variabel

yang lainnya. Dengan menggunakan pointer banyak hal dapat dilakukan seperti melewatkan suatu variabel yang ada di dalam fungsi yang telah di bahas pada bab-bab sebelumnya.

Suatu pointer bukan berisi dengan suatu nilai data seperti halnya pada variabel biasa, variabel pointer berisi dengan suatu alamat. Untuk mendeklarasikan variabel pointer kita menggunakan tanda asterik / bintang (*) didepan variabel yang di deklarasikan pada tipe data tertentu. Tanda ini juga dapat dipakai untuk mengakses nilai dari variabel yang telah ditunjuk. Untuk mendapatkan alamat dari variabel pointer kita menggunakan tanda &. Untuk lebih mengerti uraian diatas perhatikan ilustrasi berikut ini :

#include <iostream.h> void main()

{

int *px, x, y; // mendeklarasikan variabel pointer px bertipe integer x = 1000; // memberikan nilai x sama dengan 1000

px = &x; // dengan statement ini variabel pointer sekarang menunjuk ke alamat variabel x

y = *px; // mengakses variabel yang ditunjuk oleh pointer

cout << px; // menampilkan isi dari variabel pointer px berupa alamat cout << endl; // ganti baris baru

cout << y; // menampilkan isi dari variabel yang di tunjuk }

(2)

Hasil dari program diatas adalah : FFDD

1000

Dari ilustrasi diatas dapat kita lihat bahwa px (yang merupakan variabel pointer) berisi alamat dari variabel x. Sedangkan jika kita hendak mengakses nilai dari variabel yang ditunjuk oleh variabel pointer (nilai dari variabel x) maka kita gunakan tanda asterik di depan variabel pointer.

Seandainya pada program diatas tidak terdapat pernyataan : px = &x;

Namun terdapat pernyataan : y = *px;

maka, y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk variabel x. hal seperti ini dapat menyebabkan komputer menjadi hang karena pointer belum di inisialisasikan.

Satu hal lagi yang perlu diperhatikan lagi jika kita menggunakan pointer ialah tipe variabel pointer dengan tipe data variabel yang ditunjuknya haruslah sama contohnya pada program diatas variabel pointer px bertipe sama dengan variabel yang ditunjuknya yaitu x, sama-sama bertipe integer.

Pointer dan Array

Hubungan antara pointer dan array pada C/C++ sangatlah erat, sebab sesungguhnya array secara internal akan diterjemahkan dalam bentuk pointer. Untuk jelasnya perhatikan program berikut ini :

#include <iostream.h> void main()

{ static int nilai[3] = {10,20,30 }; // pemberian nilai ke array nilai

int *pnilai; // mendeklarasikan variabel pointer pnilai pnilai = nilai; // pnilai berisi alamat array

for(int i=0; i<3; i++) {

cout << *(pnilai + i) << endl; // tampilkan isi array melalui variabel

} pointer

(3)

Dari program diatas dapat dilihat bahwa pengaksesan elemen array dapat dilakukan melalui alamat memori pada variabel pointer. *(pnilai + i) sama hal nya dengan nilai[] pada array biasa. Output dari program diatas akan menghasilkan nilai 10, 20 dan 30. untuk array dua, tiga dan n dimensi pun dapat kita buat dengan menggunakan pointer. Contoh untuk array dengan dimensi dua pendeklarasiannya adalah :

*(*(pnilai + i) + j)

Array dari pointer

Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Sebagai contoh untuk membuat array satu dimensi yang bertipe integer kita seklarasikan :

int nilai[3] dirubah menjadi int *nilai

terdapat perbedaan diantara kedua statement diatas, pada array nilai[3] akan menyebabkan tiga buah tempat untuk nilai-nilai integer atau sebanyak 6 byte memori akan disiapkan untuk array ini (int = 2 byte dikali 3 tempat = 6 byte). Untuk array pointer, kompiler tidak secara otomatis menyiapkan tempat untuk nilai-nilainya, karena banyaknya nilai-nilai yang akan digunakan belum diketahui. Untuk mengatasi masalah ini, maka untuk menyiapkan sejumlah blok memori dapat digunakan cara alokasi dinamik (dynamic allocation). Cara alokasi dinamik ini menggunakan memori yang masih kosong di luar memori yang biasanya digunakan untuk data. Untuk menggunakan cara ini, perlu digunakan fungsi khusus didalam pointer yaitu menggunakan fungsi standar malloc() dengan prototypenya berada di header file stdlib.h. (ini hanya digunakan jika kita menggunakan bahasa C), jika kita menggunakan bahasa C++ maka fungsi standar yang digunakan ialah

new. Contoh mengalokasikan suatu array dengan menggunakan fungsi-fungsi

diatas adalah sebagai berikut :

nilai = malloc(sizeof(int) * 3); // untuk mengalokasikan dengan C nilai = new int // untuk mengalokasikan dengan C++ hasil dari pengalokasian diatas ialah suatu alamat yang menunjukkan byte pertama dari memori yang dialokasikan di heap. Jika alokasi memori ini gagal, bisa dikarenakan tidak mencukupinya memori pada heap, maka fungsi diatas akan menghasilkan nilai NULL.

(4)

Setelah kita mengalokasikan memori untuk array, ada baiknya jika kita menghapus / mende-alokasikan kembali array tersebut dari memori, sehingga ruang di memori heap dapat digunakan untuk keperluan yang lainnya. Untuk menghapus / mende-alokasikan sebuah array diperlukan sebuah fungsi standar

free() dari header file stdlib.h untuk para pengguna bahasa C, jika kita

menggunakan C++ kita menggunakan fungsi standar delete. Contohnya : free(nilai); // mendealokasikan dengan bahasa C delete [] nilai; // mendealokasikan dengan bahasa C++ selanjutnya pengalokasian diatas dapat dengan mudah kita membentuk suatu struktur data link list maupun double link list dengan menggunakan bahasa C/C++.

Berikut ini akan diberikan contoh program dengan menggunakan fungsi standar diatas (langsung dengan menggunakan C++) :

#include <iostream.h> #include <conio.h> struct mhs { char npm[9]; char nama[25]; char alamat[30]; int nilai; }; void main() { mhs *pmhs; int n; clrscr();

cout << "PROGRAM DATA MAHASISWA" << endl; cout << "---" << endl << endl;

cout << "Masukkan Banyaknya Data : "; cin >> n; cout << endl;

pmhs = new mhs[n]; for (int i=0; i<n; i++) {

cout << "Input Data Mahasiswa Ke-" << i+1 << endl; cout << "Nama Anda : "; cin >> pmhs[i].nama; cout << "NPM Anda : "; cin >> pmhs[i].npm; cout << "Alamat Anda : "; cin >> pmhs[i].alamat; cout << "Nilai SBP Anda : "; cin >> pmhs[i].nilai; cout << endl;

(5)

cout << "Tekan Sembarang tombol ... !"; getch();

clrscr();

cout << " Output Data Mahasiswa" << endl << endl;

cout << "===========================================" << endl; cout << " No. Nama NPM Alamat Nilai" << endl;

cout << "===========================================" << endl; for (i=0; i<n; i++)

{

gotoxy(2, i+6); cout << i+1 << "."; gotoxy(7, i+6); cout << pmhs[i].nama; gotoxy(22, i+6); cout << pmhs[i].npm; gotoxy(33, i+6); cout << pmhs[i].alamat; gotoxy(53, i+6); cout << pmhs[i].nilai << endl; } cout << "===========================================" << endl; delete [] pmhs; getch(); } Pointer ke Pointer

Pointer ke pointer merupakan suatu pointer yang menunjuk ke alamat pointer yang lainnya. Dengan menggunakan dua buah asterik pada variabel pointer, maka variabel pointer tersebut dapat mengakses ke variabel pointer yang lainnya. Contohnya :

#include <iostream.h> void main()

{

int a, *b, **c; // mendeklarasikan variabel pointer a = 1000; // memberikan nilai a sama dengan 1000

b = &a; // dengan statement ini variabel pointer sekarang menunjuk ke alamat variabel a

c = &b; // dengan statement ini variabel pointer sekarang menunjuk ke alamat variabel a

cout << *b; // menampilkan isi dari variabel pointer b berupa alamat cout << endl; // ganti baris baru

cout << **c; // menampilkan isi dari variabel pointer c }

Hasil dari program diatas adalah : 1000

(6)

Dari program diatas dapat disimpulkan bahwa dengan menggunakan pointer ke pointer, isi dari pointer yang terakhir merupaka alamat memori dari variabel pointer sesungguhnya. Pada contoh diatas, variabel b yang menunjuk ke variabel a ditunjuk kembali oleh variabel c sehingga nilai dari variabel c sebenarnya sama dengan variabel b dan variabel a.

6.3 Laporan Pendahuluan

1. Pengertian Tree serta perbedaannya dengan Binary Tree.

2. Jelaskan istilah-istilah pada Tree : daun, root, level, tinggi dan derajad. 3. Sebutkan dan jelaskan jenis kunjungan yang terdapat pada binary tree.

4. Bagaimana kunjungan secara Preorder, Inorder dan Postorder dari tree yang telah dibuat oleh PJ.

6.4 Materi Praktikum

1. Memberikan penjelasan secara teoritis mengenai pointer, terutama pengertian, konsep dasar, cara pendeklariannya dalam bahasa C/C++.

2. Penjelasan cara menerapkan pointer untuk membentuk struktur yang dinamis, melalui penggunaan fungsi-fungsi standar new dan delete.

3. memberikan contoh cara pembuatan array pointer dan pointer ke pointer. 4. Pemberian program-program sederhana pointer, diusahakan program yang

menggunakan alokasi dinamik atau jika bisa langsung penerapan link list / double link list didalam program.

5. Nilai K (Keterampilan) didapat jika praktikan melengkapi program tentang alokasi dinamik, seperti bagaimana cara menghapus sebuah variabel pointer dari memory, dll.

6.5 Laporan Akhir

Buat Algoritma dari program yang dibuat sebelumnya (jika link list dapat lebih baik). Program dapat dilengkapi dengan penggunaan pointer ke pointer atau dapat juga menggunakan array pointer untuk yang dua dimensi.

Referensi

Dokumen terkait

Pengaruh Strategi Diferensiasi dan Positioning Produk Terhadap Motivasi Nasabah ( Studi Kasus Pada Produk Tabungan Investa Cendekia di BSM KCP Banyumanik2. Semarang )

Oleh karena itu, untuk mencegah penyakit HDB perlu dilakukan penyediaan benih yang bebas Xoo serta pemahaman mengenai waktu tanam yang sesuai dengan perkembangan penyakit Xoo

Instrumen yang digunakan dalam penelitian aspek kognitif ini berupa tes objektif tentang materi sistem koloid yang terdiri dari 25.. butir soal dengan 5 alternatif

 Secara Nasional produksi padi Provinsi Sulawesi Tengah tahun 2015 mempunyai kontribusi sebesar 1,35 persen dari total produksi padi nasional sebesar 75,36 juta ton

Sedangakan penelitian dari Jincheng Din mengatakan bahwa minyak jelantah sebagai bahan baku pembuatan biodiesel adalah berperan dalam memanfaatkan limbah rumah

sistem akuntansi pemerintahan pada tingkat daerah diatur dengan peraturan. Gubernur/Bupati/Walikota, mengacu pada peraturan daerah

Namun secara umum apabila efektivitas kinerja tersebut dikaitkan dengan kegiatan pelayanan jasa, suatu kinerja layanan akan dikatakan efektif jika pelanggan merasa puas