Lompat ke konten Lompat ke sidebar Lompat ke footer

Pointer NULL Bahasa C Beserta Fungsi dan Penjelasannya

Pada artikel ini dijelaskan apa yang dimaksud dengan Pointer NULL pada Bahasa C Besarta Penjelasannya.


Pointer NULL Bahasa C Beserta Fungsi dan Penjelasannya
Pointer Null Bahasa C

Sebelum memahami lebih dalam materi tentang Pointer NULL Bahasa C Beserta Fungsi dan Penjelasannya, terlebih dahulu pelajari materi tentang: Pointer Void Bahasa C Beserta Fungsi dan Penjelasannya [klik], Pointer VS Array Bahasa C Beserta Penjelasannya [klik], dan Mendeklarasikan Pointer Ke Sebuah Fungsi Bahasa C [klik].

Pada level yang lebih tinggi, pada pemrograman Bahasa C, nilai NULL yang digunakan sebagai pointer NULL dapat digunakan pada berbagai keperpuan pemrograman. Beberapa bentuk penggunaan umum dari NULL adalah:
  • Untuk menginisialisasi sebuah variabel pointer dimana variabel pointer tersebut tidak titetapkan untuk alamat memori valid apapun.
  • Untuk memeriksa sebuah pointer null sebeleum dilakukan akses ke variabel pointer apapun. Juga, dapat dilakukan menanganan error pada kode program yang berkaitan dengan pointer atau variabel pointer dereferensi jika nilainya tidak NULL.
  • Untuk melewatkan sebuah pointer null ke argumen fungsi, pada kondisi dimana tidak ingin dilewatkan nilai alamat memori valid apapun.

Sintak:
int * pInt = NULL;

Contoh dari b adalah: 
if(pInt != NULL) /*We could use if(pInt) as well*/
{ /*Some code*/}
else
{ /*Some code*/}
The example of c is
int fun(int *ptr)
{
/*Fun specific stuff is done with ptr here*/
return 10;
}
fun(NULL);


Baca Juga:

Catatan: Pointer NULL berbeda dengan Pointer Dangling dan Pointer Uninisialisasi. Pada konteks program yang lebih spesifik, semua pointer dangling dan pointer uninisialisasi, ataupun pointer NULL adalah bersifat invalid, tetapi NULL merupakan pointer invalid spesifik yang disebutkan pada standar C yang memiliki tujuan spesifik. Dimana pointer dangling dan pointer uninisialisasi bernilai invalid karena pointer tersebut tidak dapat menunjuk alamat memori yang mestinya diakses.

Contoh:

#include <stdio.h>


int main()

{

int *i, *j;

int *ii = NULL, *jj = NULL;

if(i == j)


{

printf("This might get printed if both i "

"and j are same by chance.");

}


if(ii == jj)

{

printf("This is always printed coz "

"ii and jj are same.");

}


return 0;

}


Sedangkan pada pointer NULL, standar C secara spesifik memberikan suatu mekanisme dimana programmer dapat menggunakan dan memeriksa apakah pointer NULL merupakan pointer yang valid atau tidak. Pointer NULL merupakan bentuk ekspansi definisi dari implementasi konstanta pointer null yang didefinisikan pada banyak file header seperti "stdio.h", "stddef.h", "stdlib.h", dan lain sebagainya. Perhatikan standar C tentang pointer null, pada standar C11 klausa 6.3.2.3:

"Ekspresi konstanta integer dengan nilai 0, atau ekspresi cast ke tipe void *, adalah disebut sebagai konstanta pointer null. Jika sebuah konstanta pointer null dikonversi ke sebuah tipe pointer, maka pointer hasil disebut sebagai pointer null, yang dijamin untuk dibandingkan tidak sama dengan sebuah pointer ke object atau fungsi apapun."

int * ptr = 0;

Catatan: pada statement C, diketahui bahwa nilai 0 digunakan pada konteks pointer dan memiliki makna yang berbeda pada nilai 0 yang digunakan sebagai nilai integer. Ini merupakan salah satu alasan mengapa penggunaan preferensi NULL digunakan, karena hal tersebut memberikan makna eksplisit pada kode program yang digunakan oleh programmer pada pointer null, bukan menggunakan integer 0. Konsep penting lainnya tentang NULL adalah "Ekspansi NULL untuk implementasi definisi konstanta pointer null", dimana statement tersebut juga berasal dari klausa 7.19 pada standar C11, yang berarti bahwa representasi internal dari pointer null dapat berupa non-zero bit pattern ke proses pengangkutan pointer NULL. Oleh karena itu, nilai NULL tidak selalu dibutuhkan pada representasi internal yang digunakan sebagai zeros bit pattern. Sebuah implementasi kompilator dapat memilih untuk merepresentasikan "konstanta pointer null" sebagai sebuah bit pattern untuk sebuah bagian pertamanya atau lainnya. Namun demikian, tidak perlu terlalu mencemaskan tentang penggunaan nilai internal dari pointer null kecuali melibatkan coding kompilator atau level lebih rendah dari suatu coding. Pada umumnya, nilai NULL merupakan suatu nilai yang merepresentasikan sebuah nilai bit yang diatur ke nilai 0 saja. Untuk mengetahui secara lebih spesifik terhadap penggunannya pada suatu platform, maka perhatikan contoh berikut:

Contoh:

#include<stdio.h>


int main()

{

printf("%d",NULL);

return 0;

}


Pada contoh sebelumnya, nilai output akan mencetak keluaran berupa nilai 0 pada nilai pointer null secara internal, namun hal tersebut tetap bergantung pada jenis platform atau kompilator bahasa C yang digunakan. Tidak hanya itu, dapat pula digunakan kode program lain seperti printf("'%c",NULL) atau printf("%s",NULL), dan bahkan printf("%f",NULL), yang kemungkinan akan menghasilkan nilai output yang berbeda, bergantung pada jenis platform yang digunakan, tetapi hal tersebut bisa jadi menghasilkan hal yang unik jika menggunakan %f dengan nilai NULL.

Contoh: penggunaan sizeof(NULL) pada Bahasa C.

#include<stdio.h>


int main()

{

printf("%lu",sizeof(NULL));

return 0;

}


Karena nilai NULL didefinisikan sebagai ((void*)0), maka nilai NULL dapat dianggap sebagai sebuah pointer khusus dan nilai ukurannya akan sama dengan nilai pointer lainnya. Jika nilai ukuran pointer dari sebuah platform adalah 4 bytes, maka nilai output dari program adalah 4. Namun, jika ukuran pointer pada platform adalah 8 bytes, maka nilai output dari program adalah 8.

Contoh:

#include<stdio.h>


int main()

{

int * ptr = NULL;

printf("%d",*ptr);


return 0;

}


Pada beberapa jenis komputer, contoh program sebelumnya dapat dikompilasi secara sukses, namun akan mengalami 'crack' ketika program tersebut dijalankan secara berkelanjutan, karena akan menampilkan hasil yang tidak sama secara terus menerus, dimana hal ini muncul karena berbagai faktor. Oleh karena itu, perlu untuk dilakukan pemeriksaan nilai NULL terlebih dahulu sebelum dilakukan akses.

Karena nilai NULL umumnya didefinisikan sebagai ((void*)0), maka pada standar C11 klausa 6.2.5, berbunyi "tipe void dibandingkan sebagai sekumpulan kosong dari suatu nilai; yang merupakan tipe object tidak lengkap yang tidak dapat dilengkapi". Meskipun pada C11 klausa 6.5.3.4 disebutkan bahwa "Operator sizeof seharusnya tidak diterapkan pada ekspresi yang memiliki tipe fungsi atau tipe tidak lengkap, (baik itu) ke nama dalam tanda kurung dari jenis tersebut, atau ke ekspresi yang menunjuk anggota bit-field."

Pada dasarnya, ini berarti bahwa void adalah tipe yang tidak lengkap yang ukurannya tidak masuk akal dalam program Bahasa C, tetapi implementasi (seperti gcc) tetap dapat menggunakan sizeof(void) sebagai nilai 1, sehingga memori datar yang ditunjuk oleh pointer void dapat dilihat sebagai memori tidak diketik, yaitu urutan byte.

Contoh:

#include<stdio.h>


int main()

{

printf("%lu",sizeof(void));


return 0;

}


Pada gcc, nilai ouput dari contoh program sebelumnya dapat berupa angka 1. Namun pada C11 klausa 6.2.5, disebutkan bahwa "Pointer ke void harus memiliki persyaratan representasi dan penyelarasan yang sama dengan pointer ke tipe karakter". Karena hal tersebut, maka nilai output dari contoh program sebelumnya adalah bernilai sama terhadap nilai ukuran pointer apapun pada komputer.

Contoh:

#include<stdio.h>


int main()

{

printf("%lu",sizeof(void *));


return 0;

}


Terlepas dari menyebutkan hal-hal yang bergantung pada mesin seperti yang telah dijelaskan sebelumnya, pemrogram C pada dasarnya harus selalu berusaha untuk membuat kode seportabel mungkin. Sehingga dapat disimpulkan bahwa penggunaan NULL:
  • Harus selalu menginisialisasi variabel pointer sebagai nilai NULL.
  • Harus selalu menampilkan pemeriksaan nilai NULL sebelum dilakukan akses oleh pointer apapun.

Artikel ini didedikasikan kepada: Sheila Rahmadini, Sri Haryanti, Ulil Amri, Wahyu Isnaini Hutami, dan Adam Yanuar Rizky.

5 komentar untuk "Pointer NULL Bahasa C Beserta Fungsi dan Penjelasannya"

  1. Apa yang dimaksud dengan poinver null pada bahasa C?

    BalasHapus
    Balasan
    1. Pointer Null pada bahasa C merupakan variabel dalam bahasa pemrograman C yang memiliki nilai nol atau memiliki alamat yang tidak menunjuk nilai apapun.

      Hapus
  2. Apa kegunaan dari pointer null pada bahas C?

    BalasHapus
    Balasan
    1. Pointer null pada bahas C digunakan untuk menginisialisasi variabel pointer ketika variabel pointer tersebut belum diberi nilai alamat memori yang valid.

      Hapus
    2. Pointer null digunakan untuk meneruskan pointer ke argumen fungsi ketika tidak ingin dilakukan penerusan alamat memori yang bernilai valid.

      Hapus

Hubungi admin melalui Wa : +62-896-2414-6106

Respon komentar 7 x 24 jam, mohon bersabar jika komentar tidak langsung dipublikasi atau mendapatkan balasan secara langsung.

Bantu admin meningkatkan kualitas blog dengan melaporkan berbagai permasalahan seperti typo, link bermasalah, dan lain sebagainya melalui kolom komentar.

- Ikatlah Ilmu dengan Memostingkannya -
- Big things start from small things -