Dalam C, NULL adalah konstanta simbolis yang selalu menunjuk ke titik yang tidak ada dalam memori. Meskipun banyak programmer memperlakukannya sama dengan 0, ini adalah penyederhanaan yang dapat membuat Anda tersandung di kemudian hari. Sebaiknya periksa pointer Anda terhadap NULL secara langsung, dan gunakan 0 dalam konteks lain. Ini membuat kode Anda tetap bersih dan mudah dimengerti, karena Anda akan tahu bahwa Anda bekerja dengan pointer setiap kali Anda melihat NULL.
Langkah
Bagian 1 dari 2: Melakukan Pemeriksaan Null
Langkah 1. Gunakan kode cek nol standar
Berikut ini adalah cara paling jelas untuk menulis cek nol. Kami akan menggunakan ptr dalam artikel ini sebagai nama penunjuk yang Anda periksa.
-
jika (ptr == NULL)
{
// kode jika pointer NULL
} lain {
// kode jika tidak NULL
}
Langkah 2. Uji untuk nilai apa pun kecuali NULL
Terkadang lebih mudah untuk menguji ketidaksetaraan. Tidak ada kejutan di sini:
-
jika (ptr != NULL) {
// kode jika tidak NULL
}
Langkah 3. Tulis NULL terlebih dahulu untuk menghindari kesalahan (opsional)
Kerugian utama dari metode PTR == NULL adalah kemungkinan Anda secara tidak sengaja mengetikkan ptr = NULL sebagai gantinya, menetapkan nilai NULL ke pointer itu. Hal ini dapat menyebabkan sakit kepala yang parah. Karena pengujian untuk (dalam)kesetaraan memperlakukan operan secara simetris, Anda bisa mendapatkan hasil yang persis sama dengan menulis jika (NULL == ptr) sebagai gantinya. Ini lebih tahan kesalahan ketik, karena NULL = ptr yang tidak disengaja membuat kesalahan kompilasi sederhana.
Ini terlihat sedikit canggung bagi beberapa programmer, tetapi ini benar-benar valid. Pendekatan mana yang Anda gunakan hanya bergantung pada preferensi pribadi, dan seberapa baik kompiler Anda dalam mendeteksi kesalahan if (ptr = NULL)
Langkah 4. Uji apakah variabel benar
Sederhana jika (ptr) menguji apakah ptr adalah TRUE. Ini akan mengembalikan FALSE jika ptr adalah NULL, atau jika ptr adalah 0. Perbedaannya tidak masalah dalam banyak kasus, tetapi perlu diketahui bahwa ini tidak identik di semua arsitektur.
Kebalikannya adalah jika (!ptr), yang akan mengembalikan TRUE jika ptr adalah FALSE.
Bagian 2 dari 2: Menghindari Kesalahan
Langkah 1. Atur penunjuk sebelum memeriksa NULL
Satu kesalahan umum adalah menganggap bahwa pointer yang baru dibuat memiliki nilai NULL. Ini tidak benar. Pointer yang belum ditetapkan masih menunjuk ke alamat memori, hanya saja bukan alamat yang telah Anda tentukan. Sudah menjadi praktik umum untuk menyetel pointer yang baru dibuat atau yang baru dibebaskan ke NULL untuk memastikan Anda tidak menggunakan alamat yang tidak membantu ini secara tidak sengaja.
-
Hindari kesalahan ini:
karakter *ptr;
jika (ptr == NULL)
{
// Ini akan mengembalikan FALSE. Pointer telah diberi nilai yang valid.
}
-
Sebagai gantinya tulis:
char *ptr = NULL; //Ini memberikan pointer ke NULL
jika (ptr == NULL)
{
// Ini akan mengembalikan TRUE jika pointer belum dipindahkan.
}
Langkah 2. Perhatikan fungsi yang dapat mengembalikan NULL
Jika suatu fungsi dapat mengembalikan NULL, pikirkan apakah ini suatu kemungkinan, dan apakah itu akan menyebabkan masalah di kemudian hari dalam kode Anda. Berikut ini contoh fungsi malloc menggunakan tanda centang nol (jika (ptr)) untuk memastikannya hanya menangani pointer dengan nilai yang valid:
-
int *ptr = malloc(N * ukuran(int));
jika (ptr) {
di aku;
untuk (i = 0; i < N; ++i)
ptr = saya;
}
Langkah 3. Pahami bahwa NULL adalah 0 tetapi Anda harus selalu menggunakan NULL daripada 0 saat bekerja dengan pointer untuk kejelasan
Secara historis, C mewakili NULL sebagai angka 0 (yaitu, 0x00). Saat ini bisa menjadi sedikit lebih rumit, dan bervariasi menurut sistem operasi. Anda biasanya dapat memeriksa NULL menggunakan ptr == 0, tetapi ada kasus sudut di mana hal ini dapat menyebabkan masalah. Mungkin yang lebih penting, menggunakan NULL memperjelas bahwa Anda bekerja dengan pointer untuk orang lain yang membaca kode Anda.