C ++ 'da "İşaretçi"

İşaretçi, bir bellek adresini saklamak için kullanılan bir değişkendir. Tanımlanan her değişkenin kendi adresi vardır ve tanımlanmış herhangi bir değişkenin adresini saklamak için işaretçiler kullanılabilir. Örneğin (p değişkenin adresini, * p değişkenin verilerini depolar.):

int a; // bir tamsayı değişkeni tanımla a int * p; // bir tamsayı değişkenine bir işaretçi tanımla p p = // a değişkeninin adresini p değişkenine ata

Bir işaretçi tanımladıktan sonra, onu bir bellek adresini kaydetmek için kullanmalısınız. Bunu yapmazsanız, işaretçi kontrol dışı bir işaretçi olur ve herhangi bir adresi işaret edebilir ve adresin değerinin değiştirilmesi veya silinmesi beklenmedik bir duruma neden olabilir. Sonucunda. Bu nedenle, işaretçi 0 olarak başlatılabilir, örneğin:

int * p; p = 0 veya int * p = 0;

Farklı değişken türleri bellekte farklı baytlar işgal ettiğinden ve işaretçi bellek adresini kaydetmek için kullanılan bir değişken olduğundan, işaretçi yalnızca aynı türdeki değişkenin adresini saklayabilir.

İşaretçi adresini, işaretçi tarafından kaydedilen adresi ve adresin değerini ayırt etmeye dikkat edin, örneğin:

int a = 1; int * p = cout < < "İşaretçi adresi:" < < p < < endl; cout < < "İşaretçinin kaydedildiği adres:" < < p < < endl; cout < < "İşaretçi, adresin değerini kaydeder:" < < * p < < endl;

Neden işaretçiler kullanmalı? Çünkü büyük verileri ve sınıfları çalıştırırken, işaretçiler verilere doğrudan bellek adresleri aracılığıyla erişebilir ve bu da programda büyük miktarda kod kopyalamaktan kaçınabilir, bu nedenle işaretçiler en verimli olanıdır. Genel olarak, işaretçilerin üç ana kullanımı vardır:

(1) Yığın içinde depolanan büyük verilerin işlenmesi;

(2) Sınıfın üye verilerine ve işlevlerine hızlı bir şekilde erişin;

(3) Parametreleri işleve takma adlar biçiminde iletin.

Yığın nasıl kullanılır? Önce bir yığın oluşturun, ardından öbeğe bir işaretçi tanımlayın ve son olarak işaretçi aracılığıyla öbek içindeki verilere erişebilirsiniz. C ++ 'da, new anahtar sözcüğü bir yığın oluşturmak ve bellek ayırmak için kullanılır, ardından tahsis edilecek bir nesne türü ile yeni gelir ve derleyici belleği bu türe göre ayırır. Gibi:

int * p; p = new int; veya int * p = new int; // dört bayt bellek alanı ayrılır

Yeni ile oluşturulan hafıza alanı sistem tarafından otomatik olarak serbest bırakılmayacağından, eğer serbest bırakılmazsa, bu alandaki hafıza her zaman diğer veriler tarafından kullanılmayacaktır ve hafızanın göstericisi yerel bir değişkendir. İşlev sona erdiğinde ve geri döndüğünde, işaretçi kaybolur ve bu bellek alanı artık bulunmaz, bu duruma bellek sızıntısı denir. Bu nedenle, bir bellek alanına ihtiyacınız olmadığında, bellek alanını boşaltmak için delete anahtar sözcüğünü kullanabilirsiniz (işaret ettiği bellek alanı zaten serbest bırakıldığından işaretçiyi tekrar silmeyin. Yeniden serbest bırakırsanız, program çökecektir. İşaretçi 0'a atanmışsa, bir işaretçiyi silmek güvenlidir.), Ancak işaretçi serbest bırakılmaz ve işaretçi kullanılmaya devam edebilir. Ek olarak, bir işaretçinin gösterdiği boşluğu serbest bırakmak için silmeyi kullandıktan sonra, işaretçinin bellek adresini 0 olarak temizlemek en iyisidir. Gibi:

int * p = new int; sil p; p = 0;

Nesneler aynı zamanda öbek içinde de oluşturulabilir (nesne yaratıldığında nesnenin üye verilerini başlatmak için sınıfın kurucusu otomatik olarak çağrılır) Aşağıdaki gibi, insan sınıfının bir işaretçisi p tanımlanır ve new tarafından oluşturulan hafıza boşluğuna işaret eder. Doldurulan bellek boyutu, İnsan sınıfı nesnesinin üye değişkenleri tarafından belirlenir.

İnsan * p; p = yeni İnsan; veya İnsan * p = yeni İnsan;

Yığın içinde oluşturulan bir nesneyi silmek isterseniz, işaretçiyi doğrudan nesneye silebilirsiniz, bu da nesneyi yok etmek ve belleği serbest bırakmak için nesnenin yıkıcısını otomatik olarak çağırır.

Yığın içinde oluşturulan nesnelere, aşağıdaki gibi işaretçi değişkenleri aracılığıyla erişilebilir, burada - > Nesnenin bellek adresini okumak ve nesnenin üyelerine erişmek için kullanılabilen bir üye işaretçi operatörüdür.

(* p) .get; veya p- > almak;

İşaretçi eklenebilir ve çıkarılabilir.Aşağıdaki gibi, bir işaretçi tanımlanır ve bir int değişkenine işaret eder. Bir toplama işlemi gerçekleştirmek, orijinal bellek adresini 4 bayt artıracaktır; bir çıkarma işlemi gerçekleştirmek, orijinal bellek adresini 4 azaltacaktır. bayt.

int * p = yeni int; p ++; p--;

Sabit işaretçi, işaretçinin değiştirilemeyeceği, ancak işaret ettiği verilerin aşağıdaki gibi değiştirilebileceği anlamına gelir:

int * const p;

Bir sabite işaretçi, işaretçinin değiştirilebileceği, ancak işaret ettiği verilerin aşağıdaki gibi değiştirilemeyeceği anlamına gelir:

const int * p;

Sabit bir gösterici, aşağıdaki gibi, işaretçinin değişmez olduğu ve işaret ettiği verilerin değişmez olduğu anlamına gelir:

const int * const p;

İş teklifleri

50. Hafta "Fang Hua" ilk haftasında şampiyonluğu kazandı
önceki
Xiao Yuan Sou Ti ve Job Gang birbirlerini pornografiye karışmakla suçluyor; Beijing Metrosu, cep telefonu taramasını destekliyor; henüz bir cep telefonu satılmadı ve Essential'ın değeri 1,2 milyara u
Sonraki
Ağabey Jackie çok hızlı sürerken korkuyor! Yılbaşı gişe rekorları kıran "Blood of the Machine" Luo Zhixiang'ın en iyi oyuncusu
Kullanılabilir mi? Fotoğrafçının Honor Magic 2'yi nasıl değerlendirdiğini görün
Çift bantlı çevresel enerji toplama devresinin tasarımı
"Big World", üniversite tanıtım turunun ilk turunu kapattı, ana içerik oluşturucu, inceleme hakkında endişelenmeden filmi iyi yapmak için elinden geleni yaptı
Wang Zulan, baba olmak için yükseldi, el sıkışan üç kişilik bir ailenin fotoğraflarını çekti ve kızının doğumunu duyurdu
Kendi kendine medya girişimcilerinin sırrı: Yükseltmeden uygulamaya iPhoneXsMax
Japonya konsol pazarı Temmuz 2018 raporu: İlk sekizin tümü Switch oyunları
Alibaba Cloud'un On Yılı | Marka
"İkinci Nesil Peri: Neyse ki Bu Hayatta" prenses kucaklaşması, gerçek aşkı koruyan transeksüel çift PUBG
İyi bir görünüm var, magic2 enkarnasyon yoga eğitmeninin ihtişamı güzel
Telif hakkı sorunu çözülmedi. Çevrimiçi müziği zarif bir şekilde dinlemek mi istiyorsunuz?
İnovasyon uygulayıcısı: Çin Kırmızı Yıldız Tasarım Ödülünde bu ürünlere sahip olmayı hak ediyorsunuz
To Top