Anda di halaman 1dari 9

Pointer

A. Dasar teori

1. Pointer
Pengertian
Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori
dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya
variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari
variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.
Deklarasi Variabel dan Pointer
Dalam bahasa C / C++ terdapat format dalam deklarasi variabel. Format
deklarasi variabel dalam bahasa C / C++ adalah sebagai berikut:

tipe_data nama_variabel

Seperti halnya variabel lain, variabel pointer juga harus dideklarasikan


terlebih dahulu sebelum digunakan. Bentuk umum deklarasi pointer adalah :

tipe_data *nama_pointer

Setiap variabel yang dideklarasikan disimpan di dalam slot - slot memory


yang memiliki nomor sendiri – sendiri. Dengan pointer kita dapat mengetahui nomor
– nomor memory ini dan sekaligus memanipulasi isi dari variabel yang “ditunjuk”
oleh pointer ini.
Agar suatu variabel pointer dapat menunjuk ke variabel lain, variabel pointer ini
harus diisi dengan alamat dari variabel yang hendak ditunjuk. Sintaksis proses
penunjukan pointer ke variabel lain adalah:
tipe_data1 nama_variabel_biasa;

tipe_data2 *nama_variabel_pointer;

nama_variabel_pointer=&nama_variabel_biasa;

Pernyataan pertama merupakan deklarasi variabel biasa (yang hendak ditunjuk


oleh pointer) bernama nama_variabel_biasa dengan tipe data tipe_data1.
Pernyataan kedua merupakan deklarasi variabel pointer bernama
nama_variabel_pointer dengan tipe data tipe_data2. Sedangkan pernyataan ketiga
adalah pengisian variabel pointer nama_variabel_pointer dengan alamat variabel
nama_variabel_biasa (yang hendak ditunjuknya).
Mengakses Variabel Dengan Pointer
Dalam bahasa C / C++ kita bisa mengakses variabel dengan dua cara yaitu :
 Secara langsung
Metode ini adalah metode paling dasar dan paling sering digunakan sebagai cara
yang umum untuk melakukan akses ke dalam variabel. Akses ini berupa
pemberian nilai atau pengembalian nilai kembalian. Metode ini menjadi standar
dalam deklarasi variabel di bahasa C / C++. Syntax yang digunakan adalah :
tipe_data nama_variabel;
tipe_data nama_variabel = nilai variabel;
 Secara tidak langsung dengan menggunakan pointer
Karena pointer adalah variabel yang menunjuk variabel lain, maka kita dapat
mengakses variabel lain dengan memanipulasi nilai yang ruangan memory-nya
ditunjuk oleh pointer tersebut. Dalam bahasan pointer ada dua operator yang
memegang kunci operasi pada pointer, yaitu operator & dan operator *.
• Operator &
Operator & merupakan operator alamat. Pada saat pendeklarasian variabel,
user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal
ini akan dilakukan secara otomatis oleh kompiler dan operating sysem
pada saat run-time. Jika ingin mengetahui dimana suatu variable akan
disimpan, dapat dilakukan dengan memberikan tanda ampersand (&)
didepan variable , yang berarti "address of". Contoh : tif = &ub;
Penulisan tersebut berarti akan memberikan variable tif alamat dari
variable ub. Karena variabel ub diberi awalan karakter ampersand (&),
maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi
variabel.
• Operator *
Operator * merupakan operator reference. Dengan menggunakan pointer,
kita dapat mengakses nilai yang tersimpan secara langsung dengan mem-
berikan awalan operator asterisk (*) pada identifier pointer, yang berarti
"value pointed by". Contoh : tif = *ub; Penulisan tersebut berarti nilai
variabel tif sama dengan nilai yang ditunjuk oleh variabel ub.
Kemudian dalam teknis penggunaan pointer, pengaksesan variabel
dilakukan dengan cara menggunakan kedua operator tersebut. Jika kita
ingin melihat alamat dari variabel yang ditunjuk kita gunakan operator &.
Sedangkan untuk mengetahui nilai variabel yang ditunjuk kita gunakan
operator *.

2. Struct
Definisi
Beberapa variabel (dapat berbeda tipe) yang dikelompokkan menjadi satu dengan
sebuah nama baru.
Penggunaan Struct
Struct digunakan untuk membuat tipe data baru.
Contoh:
struct motor {
float volts; //voltage of the motor
float amps; //amperage of the motor
int phases; //# of phases of the motor
float rpm; //rotational speed of motor
};
typedef struct motor motor;
Cara Menggunakan Tipe Data Baru
 motor p, q, r;
Mendefinisikan tiga variable – p, q, dan r – masing masing bertipe data motor
 motor M[25];
Mendeklarasikan array M berisi 25 data bertipe motor
 motor *m;
Mendeklarasikan variabel pointer yang menyimpan alamat slot memori yang
berisi data bertipe motor
Cara Membuat Struct
Bentuk umum dalam mendefinisikan dan mendeklarasikan struktur adalah sebagai
berikut:
struct nama_tipe_struktur
{
tipe field1;
tipe field2;
...
...
tipe fieldn;
}
variabel_struktur;
Cara Mengakses Elemen Struct
Elemen dari struktur dapat diakses dengan menggunakan bentuk
variabel_struktur.nama_field
Antara variabel_struktur dan nama_field dipisahkan dengan operator titik (disebut
operator anggota struktur).
Contoh:
• Deklarasi
motor p;
motor q[10];

• Maka cara pengaksesannya:


p.volts — is the voltage
p.amps — is the amperage
p.phases — is the number of phases
p.rpm — is the rotational speed
q[i].volts — is the voltage of the ith motor
q[i].rpm — is the speed of the ith motor

3. Pointer pada struct


Cara Memasukkan Alamat Struct ke Pointer
Seperti halnya pointer untuk variabel biasa yang menunjukkan alamat letak
dari nilai variabelnya, pointer untuk struktur juga menunjukkan alamat letak dari
variabel strukturnya. Pointer untuk struktur juga dideklarasikan secara sama dengan
variabel pointer biasa, yaitu dengan menggunakan asterisk di muka nama variabel
pointernya.
Berikut ini adalah contoh deklarasi variabel pointer untuk struktur ini:
struct
{
char Nama[5];
float IP;
}
Mahasiswa, *PM;
PM = &Mahasiswa;
Atau:
struct
{
char Nama[5];
float IP;
}
Mahasiswa, *PM = &Mahasiswa;
Cara Mengakses Elemen - Elemen Struct Via Pointer
Telah diketahui bahwa nilai-nilai elemen suatu struktur dapat diakses dengan
menggunakan operator titik (‘.’). Selain dapat menggunakan operator titik, untuk
operasi pointer dapat juga digunakan operator ‘->’ atau operator ‘*’ untuk mengakses
elemen-elemen suatu struktur. Misalnya untuk mengakses nilai elemen IP dari
variabel struktur Mahasiswa dapat dilakukan dengan menggunakan nama variabelnya
atau dengan pointer yang menunjuk ke nama variabelnya sebagai berikut:
nama_struct.nama_elemen
Contoh : Mahasiswa.IP
atau
nama_variabel_pointer->nama_elemen_struct (melalui
pointer)
Contoh : PM->IP
atau
(*nama_variabel_pointer). nama_elemen_struct (melalui
pointer)
Contoh : (*PM).IP
PM adalah pointer yang menunjuk ke alamat variabel Mahasiswa.
(*PM) menunjukkan nilai data di lokasi yang ditunjukkan oleh pointer PM, yaitu
nilai variabel struktur Mahasiswa.
(*PM).IP menunjukkan nilai elemen IP untuk variabel struktur Mahasiswa.
B. Uji coba

Percobaan 1 : dasar-dasar pointer

Ketiklah kode program di atas


1. Apa yang terjadi di memori komputer setelah bagian deklarasi variable
dieksekusi?
2. Jelaskan proses yang terjadi ketika baris 11 dieksekusi. Apa guna operator &?
3. Jika data x dilambangkan dengan kotak dan pointer px dilambangkan titik,
ilustrasikan dengan gambar kondisi x dan px sebelum dan sesudah baris 11
dieksekusi
4. Jelaskan maksud baris 16
5. Ganti baris 8 dengan float *px. Jalankan program lalu amati apa yang terjadi.
Apa yang dapat anda simpulkan?
Percobaan 2 : mengakses nilai variable secara langsung dan secara
tidak langsung

Ketiklah kode program di atas


1. Apa beda kode pada baris 14 dan 17?
2. Bagaimana cara mengakses isi variabel pointer?
3. Bagaimana cara mengakses data yang alamatnya disimpan oleh variabel
pointer?
4. Pindahkan baris 16 dan 17 ke baris 10. Compile ulang. Apa yang terjadi?
Mengapa?
5. Pindahkan baris 16 dan 17 ke baris antara baris 11 dan 12. Compile ulang. Apa
yang terjadi? Mengapa?
6. Jelaskan perbedaan penggunaan * pada bagian deklarasi variabel dan
bagian badan program!!!
Percobaan 3 : pointer pada struct

Ketiklah kode program di atas


1. Apa guna dari baris 5 – 9?
2. Apa beda baris 21 – 22 dengan baris 25 – 26?
3. Jelaskan cara mengakses field sebuah struct menggunakan pointer!
4. Tambahkan kode sesudah baris 26 untuk mengubah nilai m.volts menjadi 30
dan m.amps menjadi 40. Kemudian tampilkan isi m.volts dan m.amps. Akses
dilakukan melalui pointer pm menggunakan operator ->
5. Tambahkan hal berikut pada program di atas
• deklarasikan pm2 sebagai variabel pointer to motor
• sesudah baris ke 26 salin nilai pm ke pm2
• Tampilkan nilai m menggunakan pm2
• ilustrasikan dengan gambar pm, pm2 dan m sebelum dan sesudah
penyalinan nilai
Percobaan 4 : pointer to pointer

Ketiklah kode program di atas


1. Jelaskan baris 7 – 9. Apa beda ptr dan pptr
2. Jika pada bagian badan program terdapat
• pptr
• *pptr
• **pptr
Jelaskan hasil keluarannya!
3. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 12 dan 13 dieksekusi
4. Berapa nilai i & j setelah baris 14 dieksekusi? Tampilkan dengan printf()
5. Berapa nilai i & j setelah baris 15 dieksekusi? Tampilkan dengan printf()
6. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 16 dieksekusi
7. Berapa nilai i & j setelah baris 17 dieksekusi? Tampilkan dengan printf()
8. Ilustrasikan dengan gambar ptr, pptr, i & j setelah baris 17 dieksekusi

Anda mungkin juga menyukai