C ve C++'da geçersiz* nedir?

C Ve C Da Gecersiz Nedir



C ve C++, bellek yönetimi ve veri işleme için büyük ölçüde işaretçilere dayanan iki programlama dilidir. İşaretçiler, programların bellekte depolanan verilere erişmesine ve bunları değiştirmesine izin veren bellek adreslerini depolayan değişkenlerdir. Özel bir işaretçi türü, geçersiz işaretçi (geçersiz*) olarak da bilinir genel işaretçi .

Boşluk İşaretçisi (void*) nedir?

Genel işaretçi olarak da bilinen bir geçersiz işaretçi, herhangi bir belirli veri türüyle ilişkili olmayan bir işaretçidir, bu da onu herhangi bir veri türüne işaret etmeye uygun hale getirir. Başka bir deyişle, bir geçersiz işaretçi bir tamsayıya, bir karaktere, bir dizeye veya başka herhangi bir veri türüne işaret edebilir. Bu esneklik, boşluk işaretçilerini C ve C++ programlamasında güçlü bir araç haline getirir.

C ve C++'da Void İşaretçi Bildirimi

C ve C++'da, geçersiz işaretçi aşağıdaki sözdizimi aracılığıyla bildirilir:







geçersiz * puan ;

Void İşaretçilerinin C ve C++'da Kullanımı

Geçersiz işaretçiler C'de çoğunlukla bir değişkenin veri türü bilinmediğinde veya çalışma zamanında değişebildiğinde kullanılır. Spesifik veri türünü bilmeye gerek kalmadan verileri depolamak ve işlemek için genel bir yol sağlarlar. Özellikle farklı veri türlerini işleyebilen işlevler veya veri yapılarıyla uğraşırken yararlıdır.



Yaygın bir kullanım geçersiz işaretçiler gibi bellek ayırma işlevlerinde bulunur. malloc() bu, herhangi bir veri türünü depolamak için kullanılabilen bir bellek bloğuna bir geçersiz işaretçi noktası döndürür. Programcı daha sonra, ayrılmış bellek bloğunda saklanan verilere erişmek ve verileri değiştirmek için geçersiz işaretçiyi uygun veri tipine çevirebilir.



C'deki geçersiz işaretçilerin başka bir kullanımı da işlev işaretçileri , bir fonksiyonun hafıza adresini saklayan değişkenlerdir. Boşluk işaretçileri, dönüş türü veya parametre listesinden bağımsız olarak herhangi bir işlevin bellek adresini depolamak için kullanılabilir ve işlev işaretçisi kullanımında daha fazla esneklik sağlar.





Kullanımı geçersiz işaretçiler C++'da hemen hemen benzerdir, ancak farklı sınıflardaki nesneler için genel bir arabirim oluşturmak için de kullanılabilirler. Bu genellikle, farklı sınıflardaki nesnelerin aynı şekilde ele alınmasına izin veren sanal işlevlerin kullanılmasıyla elde edilir. Ayrıca, C++, C'den daha sıkı tip denetimi sunar; bu, geçersiz işaretçiler yanlış bir şekilde daha fazla hataya ve hataya neden olabilir.

C ve C++'da Geçersiz İşaretçileri Kullanırken Dikkat Edilmesi Gereken Noktalar

İşte kullanırken dikkat etmeniz gereken birkaç nokta geçersiz işaretçiler C ve C++'da.



1: C'de, geçersiz* bir dönüş değeri ve işlev parametresi olarak kullanılabilir, ancak C++'da belirli bir veri tipi işaretçiye sahip olmanız gerekir.

Örneğin:

C'de kod aşağıda verilmiştir:

#include

#include

geçersiz * sayı_ekle ( int A , int B ) {

int * sonuç = alışveriş merkezi ( boyutu ( int ) ) ;

* sonuç = A + B ;

geri dönmek ( geçersiz * ) sonuç ;

}

geçersiz print_result ( geçersiz * sonuç ) {

int * puan = ( int * ) sonuç ;

printf ( 'Sonuç: %d \N ' , * puan ) ;

özgür ( puan ) ;

}

int ana ( ) {

int sayı1 = 5 , sayı2 = 7 ;

geçersiz * sonuç = sayı_ekle ( sayı1 , sayı2 ) ;

print_result ( sonuç ) ;

geri dönmek 0 ;

}

Yukarıdaki kod bir işlevi tanımlar sayı ekle() bu bir döndürür geçersiz* argüman olarak iletilen iki tamsayıyı toplamanın sonucuna işaretçi. İşlev print_result() bir tane al geçersiz* işaretçi ve sonucu yazdırır. main() işlevinde, sayı ekle() ve sonucu geç geçersiz* işaretçi ile print_result() yazdırmak için.

C++'da belirli bir veri türü gereklidir.

#include

ad alanı std'sini kullanma ;

geçersiz printInt ( int * birde ) {

cout << 'Tam sayı: ' << * birde << son ;

}

int ana ( ) {

int X = 10 ;

int * puan = & X ;

printInt ( puan ) ;

geri dönmek 0 ;

}

2: C'de, boşluk işaretçisini başka bir işaretçi türüne dönüştürebilirsiniz. örtük dönüştürme Ancak C++'da kullanmanız gerekir. açık dönüşüm dönüştürmek için geçersiz işaretçi başka herhangi bir işaretçi türüne.

arasındaki farkı göstermek için hem C hem de C++ için basit bir kod örneği örtük Ve açık dönüştürme ile ilgili geçersiz işaretçiler diğer işaretçi türlerine:

C'de aşağıdaki kod kullanılır:

#include

geçersiz yazdırChar ( geçersiz * ch ) {

karakter C = * ( karakter * ) ch ;

printf ( '%C \N ' , C ) ;

}

int ana ( ) {

karakter C = 'A' ;

geçersiz * puan = & C ;

yazdırChar ( puan ) ;

geri dönmek 0 ;

}

Yukarıdaki kod bir işlevi tanımlar yazdırChar parametre olarak bir geçersiz işaretçi alır ve o hafıza konumunda saklanan karakteri yazdırır. Ana işlevde, bir char değişkeni C tanımlanır ve adresi bir geçersiz işaretçide saklanır ptr. bu yazdırChar fonksiyon daha sonra çağrılır geçersiz işaretçi 'ptr' bir argüman olarak. Boşluk işaretçisi, açıkça bir char işaretçisine dönüştürülür. “Yazdırma Karakteri” depolanan değere erişme ve yazdırma işlevi 'C' .

C++'da kod aşağıda verilmiştir:

#include

geçersiz printInt ( geçersiz * birde ) {

int * puan = static_cast < int *> ( birde ) ;

std :: cout << * puan << std :: son ;

}

int ana ( ) {

int X = 10 ;

geçersiz * puan = & X ;

printInt ( puan ) ;

geri dönmek 0 ;

}

Yukarıdaki kod bir işlevi tanımlar printInt parametre olarak bir geçersiz işaretçi num alır ve onu kullanarak bir tamsayı işaretçisine dönüştürür. static_cast operatörü . İşlev daha sonra, atılan işaretçi tarafından işaret edilen tamsayı değerini yazdırır. Ana işlevde, bir x tamsayı değişkeni tanımlanır ve adresi bir geçersiz işaretçi ptr, daha sonra aktarılan printInt işlev. Programın çıktısı 10 olan x değeridir.

Son düşünceler

bu geçersiz C ve C++'daki işaretçiler, belirli veri türünü bilmeye gerek kalmadan verileri işlemek için güçlü bir yol sağlar. C++'da farklı sınıflardaki nesneler için genel bir arabirim oluşturmanın yanı sıra bellek tahsisi ve işlev işaretçileri için kullanışlıdırlar. Ancak, kullanımlarında C ve C++ arasındaki farkları dikkate almak önemlidir. geçersiz işaretçiler C++'da belirli veri türlerine duyulan ihtiyaç ve geçersiz işaretçileri diğer işaretçi türlerine dönüştürürken açık dönüştürme ihtiyacı gibi. Bu noktaların dikkatli bir şekilde değerlendirilmesi, daha verimli ve etkili bir şekilde kullanılmasına yol açabilir. geçersiz işaretçiler programlamada.