Belajar Bahasa C : #7 Pointer
Pada
kesempatan kali ini, kita akan mulai mempelajari pointer pada bahasa C. Umumnya
setiap bahasa pemograman memiliki pointer.
Pointer
adalah tipe data yang nilainya mengacu pada nilai lain yang
disimpan di tempat lain di memori komputer menggunakan alamatnya. Pointer
dilambangkan dengan simbol ‘*’.
Fungsi utama pointer yaitu memungkinkan suatu program agar
melaksanakan kerja lebih efisien dan praktis.
Pada intinya pointer mengambil address dari suatu variabel.
Address merupakan alamat lokasi suatu memori dari sebuah variabel. Address
berupa angka random atau angka acak dari sebuah variabel.
· Pada gambar diatas dideklarasikan variabel angka dengan nilai 10
·
Lalu dideklarasikan int *p;
·
P = &angka; berfungsi untuk variabel p mengambil
address dari variabel nilai. Sehingga nilai dari variabel p = 10.
1.
Single Pointer
Single pointer merupakan penggunaan pointer tunggal untuk
menunjuk address dari variabel lain.
Contoh program single pointer :
#include <stdio.h>
int main(){
int angka = 10;
int *p = &angka;
printf("Nilai dari variabel angka : %d\n", angka);
printf("Nilai dari variabel *p : %d\n", *p);
printf("Address dari variabel angka : %d\n", &angka);
printf("Address dari variabel *p : %d\n", p);
return 0;
}
Penjelasan :·
Variabel angka memiliki nilai 10. Sedangkan pada awalnya variabel
p tidak memiliki sebuah nilai.
·
Variabel *p mengambil address dari variabel angka dengan cara *p =
&angka;
·
Ketika alamat address telah diambil maka variabel *p memiliki
nilai yang sama dengan variabel angka.
Output
2.
Double Pointer
Double pointer digunakan untuk menunjuk address dari single
pointer.
Contoh program double pointer :
#include <stdio.h>
int main(){
int angka = 10;
int *p = &angka;
printf("Nilai dari variabel angka : %d\n", angka);
printf("Nilai dari variabel *p : %d\n", *p);
printf("Address dari variabel angka : %d\n", &angka);
printf("Address dari variabel *p : %d\n", p);
int **p2 = &p;
printf("Nilai dari variabel **p2 : %d\n", **p2);
printf("Address dari variabel *p2 : %d\n", *p2);
return 0;
}
Penjelasan :
Penggunaan
double pointer tidak beda jauh dengan single pointer. Double pointer untuk
menunjuk address dari single pointer yang sebelumnya single pointer menunjuk ke
sebuah variabel. Sehingga pada akhirnya keduanya memiliki nilai yang sama.
Output
Jenis –
jenis pointer pada bahasa C.
1.
Null pointer
Null pointer berguna ketika kamu tidak menetapkan alamat
apa pun ke penunjuk. Pointer null selalu berisi nilai 0.
Contoh program NULL pointer :
Output
2.
Void pointer
pointer yang tidak memiliki tipe data terkait dengannya. Sebuah pointer void dapat menyimpan alamat dari jenis apapun dan dapat typecast untuk jenis apapun.
Contoh program void pointer :
#include <stdio.h>
int main(){
float desimal = 7.5;
int angka = 5;
void *ptr1; // dapat mengakses dari type data manapun
void *ptr2;
ptr1 = &desimal;
ptr2 = &angka;
printf("Nilai dari *ptr1 %f\n", *((float*) ptr1));
printf("Nilai dari *ptr2 %d\n", *((int*) ptr2));
return 0;
}
Penjelasan :Void
pointer bersifat fleksibel sehingga dia dapat mengakses tipe data apapun. Pada
code diatas void pointer mengakses data dari tipe data float dan int.
Output
3.
Wild pointer
Pointer yang tidak
diinisialisasi. Pointer ini dapat diinisialisasi ke nilai sampah non-NULL yang
mungkin bukan alamat yang valid.
Contoh program Wild pointer :
Penjelasan :
Wild
pointer tidak menghasilkan output karena program tersebut tidak menunjuk ke
sebuah variabel dan pointer tersebut tidak diinisialisasi.
4. Dangling
pointer
Sebuah dangling pointer menunjuk ke variabel non-eksistensial atau lokasi memori. Dangling pointer yang mungkin menunjuk ke variabel atau lokasi
memori yang mungkin telah dibebaskan.
Terdapat tiga cara berbeda di mana Pointer disebut
dangling pointer.
a.) Variabel keluar dari ruang lingkup
Penjelasan
:
·
Variabel lokal
memiliki masa hidup lokal dan itu milik blok mereka di mana ia dideklarasikan.
Setiap kali kontrol keluar ke blok maka memori yang dicadangkan untuk itu akan
bebas secara otomatis.
·
Pada code diatas int angka =17; dan ptr = &angka merupakan
lokal variabel
·
Jika variabel
lokal dirujuk oleh pointer di luar masa pakainya, maka perilaku tidak akan
terdefinisi dan nilai pointer menjadi tak tentu.
·
Pada kode di
atas, kita mencoba membaca nilai “angka” (variabel bilangan bulat) di luar bloknya (lingkup) melalui “ptr”
(penunjuk bilangan bulat), sehingga perilaku penunjuk bilangan bulat (ptr)
tidak akan terdefinisi.
Output
b.) Dealokasi memori
Penjelasan :
Ketika memori dalam program tidak
dialokasikan, maka penunjuk menunjuk ke ruang yang dibebaskan atau dihapus yang
akhirnya mengarah ke dangling pointer.
Output
Tidak
ada output karena pointer tidak valid.
c.) Memanggil function
Penjelasan
:
Pointer yang menunjuk ke suatu variabel
menjadi dangling pointer ketika pointer yang menunjuk ke variabel lokal
bukan merupakan variabel statis.
Output
5. Complex
pointer
Sebelum mengetahui cara membaca pointer
kompleks maka kamu harus terlebih dahulu mengetahui associativity dan prioritas.
Associativity: Operator urutan dengan prioritas
yang sama dalam ekspresi digunakan.
Prioritas: Prioritas operator menjelaskan
urutan C membaca ekspresi.
Contoh
:
6. Near
pointer
Pointer yang hanya dapat menunjuk segmen data 64KB atau nomor segmen 8 dikenal sebagai pointer dekat. Itu hanya dapat mengakses data berukuran kecil sekitar 64 kb dalam jangka waktu tertentu, yang merupakan kelemahan utama dari jenis pointer ini.
7. Far
pointer
Far
Pointer yang dapat mengarahkan atau mengakses
seluruh memori tempat tinggal RAM, yaitu, yang dapat mengakses semua 16 segmen
dikenal sebagai far pointer. Ukuran far pointer adalah 4 byte atau 32 bit.
8. Huge
pointer
Huge
pointer memiliki ukuran 32-bit yang sama
dengan Far pointer, dan juga dapat mengakses bit yang
terletak di luar sektor. Far pointer yang
diperbaiki dan karenanya bagian dari sektor di mana mereka berada tidak dapat dimodifikasi
dengan cara apa pun, sedangkan huge pointer bisa.
Inilah
informasi yang membahas tentang Pointer pada bahasa C. Semoga
dengan penjelasan tersebut dapat membuat Sobat Ambisius menjadi lebih semangat
dalam mempelajari bahasa C. Terima kasih dan semoga bermanfaat.
0 Response to "Belajar Bahasa C : #7 Pointer"
Post a Comment