C'deki işaretçilerle uğraşıyorum ve bazı temel bilgilerden hala emin değilim.C: Erişim (int) * (void *) 'ye (void *) işaret ederek, (int)' ye işaret ederek ve ötelemeye işaret ederek (0)
tamsayı erişmek için bir alternatifi var mı: hafıza bu gibi görünmelidir
#include <stdio.h>
int main(void)
{
int num = 42; // we want to access this integer
void *vptrB = # // pointer B points to the integer
void *vptrA = &vptrB; // pointer A points to pointer B
printf("%d\n", * (int *) * (void **) vptrA);
return 0;
}
: Aşağıdaki örnek kod ile geldi? Örnekle kötü/güvensiz bir şey var mı? * (int *) * (void **) vptrA
, num
ürününe vptrA
ve vptrB
aracılığıyla erişmenin tek yolu var mı?
İşaretçilerinizi neden doğru türleri kullanmak yerine "void *" olarak tutuyorsunuz? * Sistemiyle * çalışmayı denemelisiniz, mücadele etmeyin. –
Ouch; Gelecekte kodunuzu okumam gerektiğini hatırlatır mısınız lütfen? Anlamak acı verici. Eğer vptrB'ye başvurabilirseniz, bunu daha basit yapabilirsiniz, ancak sadece vptrA'ya erişebilirseniz, yazdıklarınız doğru görünüyor - ama ben bunu kontrol etmek için bir derleyiciden geçmem. ve bir derleyici ile aynı şekilde yorumladı. –
Genel olarak 'void *' işlevini kullanmanın kötü bir tarz olduğunu söyleyebilirim (özellikle de yazılan bir işaretçiyi kolayca kullanabileceğiniz yerlerde) ve dolaylı olarak da dolaylılık düzeyini gizlemek için çok kötü bir stil (yani bir void * adresini saklamak) '' void ** 'yerine. Ve normalde, hata dermelemenin ortasında döküm yapmaktan kaçınıyorum, bu yüzden '' ((int **) vptrA) 'olacaktır. – Zastai