Jumat, 19 Oktober 2012

Perbedaan Pointer Dengan Referensi

1 komentar
pemrograman c++
Pointer
Sebuah pointer kadang-kadang diterjemahkan sebagai "petunjuk" adalah sebuah variabel yang bertype khusus, yaitu yang menyimpan alamat dari sebuah variabel lainnya. Pointer memiliki peran
yang sangat penting dalam C/C++. Secara khusus, pointer berperan vital dalam implementasi
struktur data seperti array, string, dan linked list. Selain itu, pointer juga dapat digunakan untuk
pengiriman parameter fungsi dan untuk menunjuk pada alamat fungsi. Untuk tujuan yang terakhir
ini pembahasannya di luar fokus bab ini.
Dalam memahami pointer, ada beberapa konsep dasar atau terkait yang perlu dipelajari.
Diantaranya adalah referensi, pendeklarasian pointer, inisialisasi dan pendefinisian pointer, akses
pointer, dereferensi, null pointer, void pointer, dan penggunaan pointer untuk pengiriman
parameter fungsi.

Referensi
Seperti yang telah diketahui, setiap variabel yang dideklarasikan akan dialokasikan tempat tertentu
pada memori. Keberadaan variabel ini memudahkan kita untuk menggunakan data yang tersimpan
pada memori, tanpa memedulikan lokasi fisik data tersebut. Untuk mengakses atau mengubah
data tersebut cukup merujuknya melalui nama variabelnya. Tetapi sebenarnya kita masih bisa
mengakses lokasi data tersebut melalui alamat variabelnya jika diperlukan. Alamat variabel ini
sering juga disebut dengan “referensi” dari variabel tersebut. Dalam bahasa C/C++, proses me-
“referensi” atau mengakses alamat sebuah variabel dapat menggunakan operator alamat atau
referensi yang direpresentasikan dengan simbol ampersand(&).
Contoh di bawah ini menunjukkan cara mengakses alamat dari variabel menggunakan operator &.

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
int a = 17;
double b = 13.5;
printf("Isi variabel: \n");
printf("\t a = %d",a);
printf("\t b = %.2lf",b);
printf("\n\nAlamat variabel: \n");
printf("\t a = %d ",&a);
printf("\t b = %d ",&b);
system(“pause”);
return 0;
}

Setelah menjalankan
program tersebut dan memperhatikan hasilnya, cobalah untuk mengubah format keluaran &a dan
&b pada baris ke-13 dan ke-14 dari %d menjadi %p lalu amati hasilnya. Ambillah kesimpulan dari
perubahan tersebut.Saat variabel a dan b dideklarasikan dan diinisialisasikan dengan nilai masing-masing 17 dan 13.5,
di memori dialokasikan tempat yang sesuai, Nilai alamat dari a dan b yang tertulis di sini hanya sebagai contoh; nilai yang sebenarnya dapat berbeda dalam setiap menjalankan program. Alamat a dan b dapat diakses dengan ekspresi
masing-masing &a dan &b.

Deklarasi Variabel Pointer
Sebelum diisikan dengan alamat dari variabel lainnya, sebuah pointer perlu dideklarasikan terlebih
dahulu. Sintaksis pendeklarasiannya adalah sebagai berikut.
Tipedata variabel yang ditunjuk *namavariabel pointer;
atau
tipedata variabel yang ditunjuk * namavariabelpointer;
Perhatikan penggunaan simbol bintang/asterisk(*) di atas. Simbol ini membedakan deklarasi
sebuah variabel non-pointer dengan deklarasi variabel pointer. Tipe data variabel yang ditunjuk
pointer dapat berupa sembarang tipe. Aturan penamaan variabel pointer harus mengikuti aturan
yang sama dengan penamaan variabel biasa.
Contoh deklarasi pointers:
int* pi; // pointer to integer
float* pf; // pointer to float7
Pointer yang telah dideklarasikan hanya dapat diisikan dengan alamat dari variabel yang bertipe
data sesuai dengan deklarasi pointernya. Sebagai contoh, sebuah pointer to integerhanya dapat
menyimpan alamat dari variabel yang bertipe data integer.

Pendefinisian Pointer dan Proses Referensi
Saat dideklarasikan, sebuah pointer menunjuk pada alamat yang ‘acak’ atau tidak terdefinisi.
Dalam keadaan demikian usaha untuk mengakses pointer ini dapat berakibat fatal karena pointer
ini mungkin berisi alamat dari memori yang sedang dikelola oleh sistem atau aplikasi lain. Oleh
karena itu, untuk menggunakan sebuah pointer kita harus memastikan bahwa dia berisi alamat
yang benar atau yang kita inginkan.
Inisialisasi atau pendefinisian sebuah pointer dapat dilakukan dengan salah satu dari dua cara.
Pertama, dengan proses referensi ke variabel yang sudah ada. Kedua, dengan alokasi memori
dinamik. Sub bab ini hanya akan membahas cara yang pertama. Cara yang kedua akan
didiskusikan di bab lainnya.
Sintaksis proses referensi sebuah pointer ke variabel lain yang sudah ada adalah:
namavariabelpointer = &namavariabellainnya;
Perhatikan pemakaian operator referensi (&) pada pernyataan di atas. Tentunya, kedua variabel di
atas sudah harus dideklarasikan sebelumnya.
Contoh di bawah ini menunjukkan inisialisasi pointer dengan cara referensi ke variabel lainnya.
Jalankanlah program ini dan perhatikan hasilnya.
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
int main(){
int x; // Nilai x acak
int *px; // Nilai px acak
printf("\nKondisi x dan px sebelum inisialisasi ");
printf("\nNilai x: %d", x);
printf("\nAlamat x: %d", &x);
printf("\nNilai px = %d", px);
printf("\nAlamat px = %d\n", &px);
px = &x;
x = 10;
printf("\nKondisi x dan px setelah inisialisasi ");
printf("\nNilai x: %d", x);
printf("\nAlamat x: %d", &x);
printf("\nNilai px = %d", px);
printf("\nAlamat px = %d", &px);
system("pause");
return 0;
}

Oke, selamat mencoba, dan janagan lupa periksa kembali programnya setelah dijalankan.

1 komentar:

Posting Komentar