Statistiche web Belajar Bahasa C : #7 Pointer - Sobat Ambisius

Iklan 1

Belajar Bahasa C : #7 Pointer

Hallo Sobat Ambisius!!

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 :

#include <stdio.h>

int main(){
    int *ptr;
    ptr = NULL;
    printf("%d\n", ptr);    
    return 0;
}

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 :

#include <stdio.h>

int main(){
   int *ptr; 
   printf("\n%d",*ptr);
    return 0;
}

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

#include <stdio.h>

int main(void)
{
    int *ptr;
    {
        int angka = 17;
        ptr = &angka;
    }
    //variabel angka adalah dangling pointer
    printf("angka = %d\n", *ptr);
    return 0;
}

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


#include <stdio.h>
#include <stdlib.h>

int main(){
 int *ptr=(int *)malloc(sizeof(int));
 int x=10;
 ptr=&x;
 free(ptr);
 return 0;
 } 

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

#include <stdio.h>

 int *function_angka(){
 int angka = 10;
 return &angka;
 }
 
 int main(){
    
 int *ptr = function_angka();
 printf("%d\n", *ptr);
 return 0;
 }   

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 :

 int (*p)(int (*)[20], int (*)void)) 

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

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel