Null İşaretçiler
Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 4 / 56.
Bir işaretçi bildirdiğinizde, otomatik olarak anlamlı bir şeyi göstermez. Başlatılmamış bir işaretçi rastgele bellek adresleri içerir ve bu işaretçiyi kullanmaya çalışırsanız ciddi hatalara yol açabilir. Güvenli programlama için boş işaretçilerin vazgeçilmez olduğu nokta burasıdır.
Null işaretçisi, açıkça hiçbir şeyi göstermeyen bir işaretçidir. Modern C++'ta, bir null işaretçisini nullptr ile başlatarak 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çiyi başvurusunu kaldırarak kullanmaya çalışmadan önce null olup olmadığını kontrol edebilirsiniz.
Herhangi bir işaretçiyi kullanmadan önce, basit bir if ifadesi kullanarak onun null olmadığını doğrulamalısınız:
if (ptr != nullptr) {
// Burada *ptr kullanmak güvenli
int value = *ptr;
}Bu uygulama, geçersiz bellek konumlarına erişim nedeniyle programınızın çökmesini önler. İşaretçileri bildirirken her zaman nullptr ile başlatın ve başvuruyu kaldırmadan önce null olup olmadıklarını kontrol edin.
Görev
KolayDereference etmeden önce null pointer'ları kontrol ederek güvenli pointer kullanımını gösteren bir program oluşturun.
Aşağıdaki girdi sağlanacaktır:
"valid"veya"null"olacak bir dize
Programınız şunları yapmalıdır:
dataadlı bir tamsayı değişkeni tanımlayın ve42değeriyle başlatınptradlı bir pointer tanımlayın- Girdi
"valid"isedata'nın adresiniptr'ye atayın - Girdi
"null"isenullptr'yiptr'ye atayın - Kullanmaya çalışmadan önce
ptr'nin null olmadığını kontrol etmek için bir if deyimi 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 çıktı biçimini kullanın:
Value: [value]Null pointer'lar için şu biçimi 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 tanımla
int data = 42;
// TODO: Kodunuzu buraya yazın
// - ptr adında bir işaretçi tanımla
// - Girdiyi kontrol et ve ptr'ye uygun değeri ata
// - İşaretçiyi güvenli bir şekilde kontrol etmek ve kullanmak için if ifadesini 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