Bu eğitimde, boşluk işaretçileri ve bunları örnekler yardımıyla nasıl kullanacağımızı öğreneceğiz.
Bu eğiticiye devam etmeden önce, C ++ işaretçilerini kontrol ettiğinizden emin olun.
C ++ 'da, bir veri türündeki bir değişkenin adresini başka bir veri türünün işaretçisine atayamayız. Şu örneği düşünün:
// pointer is of int type int *ptr; // variable is of double type double d = 9.0; // Error // can't assign double* to int* ptr = &d;
Burada hata, adres bir double
tür değişkeni olduğu için ortaya çıktı . Ancak, işaretçi int
tiptedir.
Bu gibi durumlarda, C ++ 'da void (void işaretçileri) için işaretçiyi kullanabiliriz . Örneğin,
// void pointer void *ptr; double d = 9.0; // valid code ptr = &d;
Hükümsüz işaretçi o işaretçi işaret ettiği değişkenin veri türünü bilmiyorsanız zaman kullanılan bir jenerik göstericidir.
Örnek 1: C ++ Void Pointer
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void ptr = &f; cout << &f << endl; cout << ptr << endl; return 0; )
Çıktı
0xffd117ac 0xffd117ac
Burada işaretçiye ptr
değeri verilir &f
.
Çıktı, ptr float
değişkeninin bir f değişkeninin adresini sakladığını gösterir .
Gibi void
boş bir türüdür geçersiz işaretçileri indirgenmedikleri edilemez.
void* ptr; float* fptr; float f = 2.3; // assign float address to void pointer ptr = &f; cout << *ptr << endl; // Error // assign float address to float pointer fptr = &f; cout << *fptr << endl; // Valid
Örnek 2: Boş İşaretçinin İçeriğini Yazdırma
Bir boşluk göstericisinin içeriğini yazdırmak için static_cast
operatörü kullanırız . İşaretçiyi void*
türden işaretçinin depoladığı adresin ilgili veri türüne dönüştürür :
#include using namespace std; int main() ( void* ptr; float f = 2.3f; // assign float address to void pointer ptr = &f; cout << "The content of pointer is "; // use type casting to print pointer content cout << *(static_cast(ptr)); return 0; )
Çıktı
İşaretçinin içeriği 2.3'tür
Bu program void
ptr işaretçisinin gösterdiği adresin değerini yazdırır .
Bir void
göstericiye referans veremeyeceğimiz için kullanamayız *ptr
.
Ancak, void*
işaretçi tipini tipe çevirirsek, işaretçinin float*
gösterdiği değeri kullanabiliriz void
.
Bu örnekte, kullanmış static_cast
gelen işaretçi veri türü dönüştürmek için operatör void*
için float*
.
C tarzı döküm
Değeri yazdırmak için C-stil dökümü de kullanabiliriz.
// valid cout << *((float*)ptr);
Ancak static_cast
C tarzı döküm tercih edilir.
Not: void işaretçileri, const
veya volatile
niteleyicilerle değişkenlerin adreslerini saklamak için kullanılamaz .
void *ptr; const double d = 9.0; // Error: invalid conversion from const void* to void* ptr = &d;