kıllı bildirimleri okumak için kural bağlamak
*
önce (yani
*a[]
işaretçiler bir dizidir
()
olduğunu ve
[]
hatırlayarak, en soldaki tanımlayıcı ile başlayıp çıkış yolu çalışmaktır
, (*a)[]
bir dizi için bir işaretçi, *f()
bir işaretçi dönen bir fonksiyondur, ve (*f)()
bir fonksiyonu için işaretçi) aşağıdaki gibidir: opCode
'+', GetPtr1
olacak r eşit ise, Yani
GetPtr1 -- GetPtr1
GetPtr1( ) -- is a function
GetPtr1( opCode) -- taking a single parameter named opCode
GetPtr1(const char opCode) -- of type const char
*GetPtr1(const char opCode) -- and returning a pointer
(*GetPtr1(const char opCode)) ( ) -- to a function
(*GetPtr1(const char opCode)) (float, float) -- taking two parameters of type float
float (*GetPtr1(const char opCode)) (float, float) -- and returning float
Plus
işlevine bir işaretçi seçin ve '-' ise, Minus
işlevine bir işaretçi döndürecektir.
C ve C++ bildirimi sözdizimi, ifade merkezlidir (Bjarne aksi taktirde yaptığı gibi); Bildirimin şekli, kodda kullanılacak şekliyle ifadenin biçimi ile eşleşmelidir.biz bir işlev int
bir gösterici ile döner f
var ve biz işaret ediliyor değeri erişmek istiyorsanız
, biz işlevini yürütmek ve sonuç KQUEUE:
x = *f();
ifade tipi Şimdi bir işlevi olduğunu varsayalım *f()
int
, bu nedenle fonksiyon için beyan/tanım
int *f() { ... }
olduğunuYukarıda tanımlanan f
işlevine bir işaretçi döndürenve f1
numaralı telefonu arayarak bu tamsayı değerine erişmek istiyoruz. Biz (f
bir işaretçi döndürür beri) KQUEUE o Sonuç daha sonra (fonksiyon f
olan) sonuç derefence, f1
arama ve çalıştırmak ve gerek:
x = *(*f1())(); // *f1() == f, so (*f1())() == f() and *(*f1())() == *f()
ifade tipi *(*f1())()
int
, yani f1
ihtiyaçları için decaration/tanım olarak
int *(*f1())() { return f; }
o (== işlemkodu else if '-') 'kontrol etmek iyi olabilir futu bazı gece yarısı yağ yakıcı önlemek için re – Chubsdad
Konu, sorularınız hakkında çok fazla bilgi vermez .. Olmalı. – mih