Pointer dan array

Written By Anisa Indra on Wednesday, May 08, 2013 | 3:56 AM


Bahasa c++ membolehkan kita untuk memanipulasi memori dengan cara penggunaan pointer. Hal ini merupakan fitur yang tidak disediakan oleh bahasa pemrograman yang lain. Apabila digunakan secara benar maka akan sangat menguntungkan, tetapi bila salah dalam penggunaan, maka bisa berakibat kerusakan (crash atau hang) pada sistem operasi.

Konsep dan pengertian pointer

Pointer adalah variabel, namun berbeda dengan variabel normal. Pointer menyimpan alamat pada memori, bukan nilai yang kita masukkan. Perhatikan contoh berikut.

Contoh 9.20. Mendeklarasikan pointer.

#include <iostream>

using namespace std;

int main() {
long *Alamat;
long X;

Alamat = &X;
X = 5; // Mengisikan nilai 5 ke dalam variabel X

cout<<"Nilai X : "<<X<<endl;
cout<<"Nilai *Alamat : "<<*Alamat<<endl;
cout<<"Nilai Alamat : "<<Alamat<<endl;
cout<<"Nilai &X : "<<&X<<endl;

*Alamat = 20; // Mengisikan nilai 20 ke dalam *Alamat

cout<<"Nilai X : "<<X<<endl;
cout<<"Nilai *Alamat : "<<*Alamat<<endl;
cout<<"Nilai Alamat : "<<Alamat<<endl;
cout<<"Nilai &X : "<<&X<<endl;

return 0;
}

Pada contoh di atas, kita deklarasikan variabel alamat sebagai pointer dengan menambahkan tanda * di depan nama variabel. Jika kita tidak menggunakan tanda *, berarti variabel tersebut akan berfungsi seperti variabel normal. Variabel X kita deklarasikan sebagai variabel normal dengan tipe data long. Perhatikan pada baris Alamat = &X. Baris ini menyatakan bahwa variabel Alamat (bukan pointer) akan diisi dengan nilai dari alamat X. Tanda & di depan nama variabel berarti kita menginginkan nilai alamat memorinya yang kita gunakan dan bukan nilainya. Apabila kita eksekusi programnya, maka tampilannya akan tampak seperti pada gambar 9.4.


Perhatikan nilai-nilai output pada gambar 9.4. Nilai seperti 0x22ff88 adalah angka hexadesimal dari alamat variabel. Kalau kita amati, ketika kita memasukkan nilai 5 pada variabel X, maka variabel *Alamat akan berisi juga nilai 5. Demikian juga ketika kita memasukkan nilai 20 pada variabel *Alamat, nilai X juga berubah menjadi 20. Hal ini karena variabel *Alamat dan X menempati alamat memori yang sama.

Setiap kali kita mendeklarasikan sebuah pointer, maka otomatis pointer akan menunjuk alamat acak pada memori. Oleh karena itu, kita harus mengeset variabel pointer tersebut agar tidak menunjuk alamat tertentu dengan cara memberi nilai NULL. Perhatikan contoh kode berikut dan hasil eksekusinya (gambar 9.5).

Contoh 9.21. Mendeklarasikan pointer dengan NULL.

#include <iostream>

using namespace std;

int main() {

long *Alamat;
long *Alamat1;

Alamat = NULL;

cout<<"Alamat memori yang ditunjuk dengan NULL :
"<<Alamat<<endl;
cout<<"Alamat memori yang ditunjuk tanpa NULL :
"<<Alamat1<<endl;

return 0;
}

Penggunaan new dan delete pada pointer

Kata kunci New, dapat digunakan untuk mengalokasikan memori pada ruang yang masih kosong. Kata kunci ini diikuti oleh tipe data yang akan dialokasikan, sehingga compiler akan mengetahui seberapa besar memori yang akan dialokasikan. Sedangkan delete merupakan kebalikan dari new. Delete akan membebaskan memori dari variabel yang kita gunakan. Perintah delete ini sangat penting, karena apabila kita tidak membebaskan memori dari penggunaan, maka akan sangat memboroskan pemakaian memori, dan pada akhirnya akan membuat sistem berjalan tidak semestinya. Perhatikan contoh penggunaan new dan delete berikut ini.

Contoh 9.22. Penggunaan new dan delete.

#include <iostream>

using namespace std;

int main() {
int *Alamat;

// Melakukan alokasi memori
Alamat = new int;

// Menggunakan memori yang telah dialokasikan
*Alamat = 100;

cout<<"Nilai *Alamat : "<<*Alamat<<endl;

// membebaskan memori
delete Alamat;

return 0;
}

Array

Seperti telah dijelaskan pada label sebelumnya, array dapat digunakan untuk menyimpan banyak data yang tipenya sama pada satu nama variabel. Pendefinisian array pada C++ hampir mirip dengan VB atau Java. Hanya sintaks penulisannya yang berbeda. Perhatikan contoh array sederhana berikut ini.

Contoh 9.23. Array sederhana.

#include <iostream>

using namespace std;

int main() {
// deklarasi array A dengan 5 buah elemen bertipe int
int A[5];

cout<<"A[C]"<<" "<<"B"<<endl;
// Memasukkan nilai ke dalam elemen array
for (int C=0; C<5; C++) {
double B = 5;
A[C] = C;
B = A[C]/B;
cout<<A[C]<<" "<<B<<endl;

}
return 0;
}

Pada contoh di atas kita mendeklarasikan array dengan nama A dan tipe datanya adalah int. C pada kode di atas adalah variabel counter. Untuk memasukkan nilai pada array, perhatikan pada baris A[C] = C. C di sini adalah indeks dari variabel A. Sama seperti halnya pada VB ataupun Java, nilai default awal dari indeks array adalah 0. Apabila contoh di atas dijalankan, maka output akan tampak seperti pada gambar 9.6.


Pada contoh 9.23 di atas kita mendeklarasikan array tanpa inisialisasi nilai. Tapi sebenarnya kita dapat langsung memberi nilai bersamaan dengan pendeklarasian variabel array. Kemudian kita dapat merubah nilainya ketika program sedang berjalan, atau dibagian lain dari program. Perhatikan contoh 9.24 berikut.

Contoh 9.24. Deklarasi dan inisialisasi array.

#include <iostream>

using namespace std;

int main() {
// Deklarasikan dan inisialisasi array
char X[3] = { 'A', 'B', 'C' };

// Menampilkan nilai awal elemen array
cout<<"Nilai array awal"<<endl;
cout<<"X[0] = "<<X[0]<<endl;
cout<<"X[1] = "<<X[1]<<endl;
cout<<"X[2] = "<<X[2]<<endl;

// Mengubah elemen ke-1 dan ke-2 X[0] = 'G'; X[1] = 'H';

// Menampilkan nilai perubahan dari elemen array
cout<<"Nilai array setelah dirubah"<<endl;
cout<<"X[0] = "<<X[0]<<endl;
cout<<"X[1] = "<<X[1]<<endl;
cout<<"X[2] = "<<X[2]<<endl;

return 0;
}

Jika kita jalankan kode program di atas, maka hasilnya akan tampak seperti pada gambar 9.7.


C++ juga menyediakan fitur untuk membuat array multidimensi. Deklarasi array multidimensi dapat dilakukan dengan cara seperti pada contoh 9.25.

Contoh 9.25. Deklarasi array multidimensi.

#include <iostream>

using namespace std;

int main() {

// Deklarasi dan inisialisasi array multidimensi
int Matrik_A[3][2] = { {1,2}, {3,4}, {5,6} };
int Matrik_B[2][3] = { {1,2,3}, {4,5,6} };

// Mendeklarasikan variabel untuk indeks pengulangan
int j, k;

// Menampilkan nilai yang tersimpan dalam elemen array A
cout<<"ISI MATRIKS A"<<endl;
for (j=0; j<3; j++) {
for (k=0; k<2; k++) {

cout<<"Matrik A["<<j<<"]["<<k<<"] =
"<<Matrik_A[j][k]<<endl;
}
cout<<endl;
}

// Menampilkan nilai yang tersimpan dalam elemen array B
cout<<"ISI MATRIKS B"<<endl;
for (j=0; j<2; j++) {
for (k=0; k<3; k++) {
cout<<"Matrik B["<<j<<"]["<<k<<"] =
"<<Matrik_B[j][k]<<endl;
}
cout<<endl;
}

return 0;
}

Pada contoh di atas, ada dua buah array multidimensi yaitu: Matrik_A dan Matrik_B. Keduanya merupakan matriks dua dimensi. Matrik_A memiliki 3 baris dan 2 kolom sedangkan Matrik_B memiliki 2 baris dan 3 kolom. Pengisian nilai elemen array dilakukan pada saat deklarasi. Namun kita dapat mengisi dengan menggunakan masukkan dari keyboard melalui perintah cin. Hasil eksekusi dari program di atas akan tampak seperti pada gambar 9.8.


0 komentar :

Post a Comment

Terima kasih, atas saran atau usulan anda.

 
Copyright © 2011-2015. Varia nusantara - All Rights Reserved
Proudly powered by Blogger