Null İşaretçiler
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 4 / 56.
Bir pointer bildirdiğinizde, otomatik olarak anlamlı bir şeyi göstermez. Başlatılmamış bir pointer rastgele bellek adresleri içerir ve onu kullanmaya çalışırsanız ciddi hatalara yol açabilir. Güvenli programlama için null pointer'lar işte bu noktada büyük önem kazanır.
Null pointer, açıkça hiçbir şeyi göstermeyen bir pointer'dır. Modern C++'ta, onu nullptr ile başlatarak bir null pointer oluşturursun:
int* ptr = nullptr; // ptr artık bir null pointernullptr anahtar sözcüğü, işaretçinin herhangi bir geçerli bellek konumunu göstermediğini belirtir. Bu, bir işaretçiyi başlatılmamış bırakmaktan çok daha güvenlidir; çünkü işaretçinin null olup olmadığını, işaretçinin referansını kaldırmayı denemeden önce kontrol edebilirsiniz.
Herhangi bir pointer kullanmadan önce, basit bir if ifadesi kullanarak null olmadığını doğrulamalısın:
if (ptr != nullptr) {
// Burada *ptr kullanmak güvenli
int value = *ptr;
}Bu uygulama, geçersiz bellek konumlarına erişilmesi nedeniyle programınızın çökmesini önler. pointer'ları bildirirken her zaman nullptr ile başlatın ve dereference etmeden önce check edin.
Görev
KolayDereference işlemi yapmadan önce null pointer'ları kontrol ederek güvenli pointer kullanımını gösteren bir program oluşturun.
Aşağıdaki input sağlanacaktır:
"valid"veya"null"olacak bir string
Programınız şunları yapmalıdır:
dataadlı bir tamsayı variable Declare edin ve42değeriyle başlatınptradlı bir pointer Declare edin- input
"valid"isedata'nın adresiniptr'ye assign edin - input
"null"isenullptrdeğeriniptr'ye assign edin - Kullanmaya çalışmadan önce
ptr'nin null olmadığını check etmek için bir if-statement kullanın - Pointer null değilse, işaret ettiği değeri yazdırın
- Pointer null ise bir güvenlik mesajı yazdırın
Aşağıdaki tam output formatını kullanın:
Value: [value]Null pointer'lar için bu formatı kullanın:
Pointer is null - cannot dereferenceKendin dene
#include <iostream>
#include <string>
using namespace std;
int main() {
// Girdiyi oku
string input;
cin >> input;
// data değişkenini bildir
int data = 42;
// TODO: Kodunu buraya yaz
// - ptr adında bir işaretçi bildir
// - Girdiyi kontrol et ve ptr'ye uygun değeri ata
// - İşaretçiyi güvenli şekilde kontrol edip kullanmak için if-statement kullan
return 0;
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık & Akış bölümündeki tüm dersler
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev EklemeKendi başına pratik yap: Online C++ derleyicisi