Typedef işlev işaretçisi?
Dinamik yük DLL öğreniyorum ama benim anlamadığım bu hat
typedef void (*FunctionFunc)();
Bir kaç sorum var. Eğer birisi onlara cevap mümkün olursa minnettar olurum.
- Neden
typedef
kullanılır? - Sözdizimi garip görünüyor;
void
sonra işlev adı falan değil. İsimsiz bir fonksiyon gibi görünüyor. - Bir işlev işaretçisi bir fonksiyonun bellek adresini saklamak için oluşturulur?
Şu an kafam karıştı. bana bazı şeyleri netleştirebilir misiniz?
CEVAP
typedef
bir dil associates bir türü için bir isim inşa etmek.
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
onlar gibi kullanarak
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
Gördüğünüz gibi, sadece tanım yukarıda verilen typedefed adını değiştirebilirsin.
Zorluk C ve C fonksiyonları sözdizimi ve okunabilirlik için işaretçiyi yatıyor , ve typedef
Bu tür açıklamalar okunabilirlik artırabilir. Ancak, sözdizimi, fonksiyonlar - basit diğer türleri farklı olarak bir dönüş değeri ve parametreleri, işlev işaretçisi bazen uzun ve karmaşık Bildirgesi böylece olabilir beri uygun.
Okunabilirlik fonksiyonlar diziler ve daha başka dolaylı tatlar işaretçiler ile gerçekten zor olmaya başlayabilir.
Üç sorularınızı cevaplamak için
Neden typedef kullanılır? Fonksiyonları için kod - özellikle işaretçileri için okuma kolaylığı, ya da adlarının yapısı.
Sözdizimi tek işaretçi bildirimi fonksiyonu için () görünüyor Bu sözdizimi en azından başında zaman açık okunmaz. Bunun yerine
typedef
bir bildirim kullanarak okumayı kolaylaştırırBir işlev işaretçisi bir fonksiyonun bellek adresini saklamak için oluşturulur? Evet, bir işlev işaretçisi bir işlev adresi saklar. Bu program
typedef
tek yazma kolaylığı inşa/okuma ile ilgisi yok ; derleyici sadece gerçek kodunu derlemeden önce typedef tanımını genişletir.
Örnek:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456
Typedef işlev işaretçisi?...
"açmak" eşleşen bir işlev iş...
Ne'en yakın Java'da bir işlev işa...
Nasıl işlev işaretçisi bir dizi kullan...
Nasıl İşlev< kullanıyorsunuz;> ve...