Neden fonksiyon işaretçi tanımları ve işaretleri herhangi bir sayı ile çalışmak ' ve' ya'*'yıldız yapmak? | Netgez.com
SORU
1 AĞUSTOS 2011, PAZARTESİ


Neden fonksiyon işaretçi tanımları ve işaretleri herhangi bir sayı ile çalışmak ' ve' ya'*'yıldız yapmak?

Neden ÅŸu iÅŸi?

void foo() {
    cout << "Foo to you too!\n";
};

int main() {
    void (*p1_foo)() = foo;
    void (*p2_foo)() = *foo;
    void (*p3_foo)() = &foo;
    void (*p4_foo)() = *&foo;
    void (*p5_foo)() = &*foo;
    void (*p6_foo)() = **foo;
    void (*p7_foo)() = **********************foo;

    (*p1_foo)();
    (*p2_foo)();
    (*p3_foo)();
    (*p4_foo)();
    (*p5_foo)();
    (*p6_foo)();
    (*p7_foo)();
}

CEVAP
1 AĞUSTOS 2011, PAZARTESİ


Operatörler bu kombinasyonlar aynı şekilde çalışmasını sağlamak, bu birkaç parça vardır.

Bu iş temel neden de bir işlev (foo) işlevi için bir işaretçi örtük olarak dönüştürülebilir olmasıdır. Bu void (*p1_foo)() = foo; çalışıyor: foo dolaylı olarak kendisi için bir işaretçi dönüştürülür ve bu işaretçi p1_foo. atanır

Bir fonksiyonu uygulandığında & bir nesneye uygulanan bir nesnenin adresi verir gibi işlev işaretçisi verir, tekli. Sıradan işlev işaretçileri için, her zaman örtülü-fonksiyon-işlev işaretçisi dönüşüm nedeniyle gereksiz. Her durumda, bu void (*p3_foo)() = &foo; çalışıyor.

Birli *, ne zaman uygulanan bir işlev işaretçisi, verim sivri işlevi, gibi verim sivri nesne ne zaman uygulanır sıradan bir gösterici bir nesne.

Bu kurallar ile birlikte. İkinci, 9**: örnek son düşünün

  • İlk foo dolaylı olarak kendisi için bir iÅŸaretçi ve * Bu iÅŸlev iÅŸaretçisi uygulanan ilk dönüştürülür, iÅŸlevini oluÅŸturan 12* *tekrar.
  • O zaman, sonuç yine dolaylı olarak kendisi için bir iÅŸaretçi ve * tekrar fonksiyonu foo verimli uygulandığı ikinci dönüştürülür.
  • Sonra örtülü olarak iÅŸlev iÅŸaretçisi tekrar çevrilir ve deÄŸiÅŸken atanır.

İstediğiniz gibi *s gibi birçok ekleyebilirsiniz, sonuç hep aynı. *s daha fazla, daha eğlenceli.

Ayrıca, 17**: beşinci örnek sayabiliriz

  • İlk, foo dolaylı olarak kendisi için bir iÅŸaretçi dönüştürülür; birli * tekrar foo verimli uygulanır.
  • Daha sonra & foo, deÄŸiÅŸkene atanmış olan foo bir iÅŸaretçi getirisi için uygulanır.

& sadece uygulanan bir işlevi olmasına rağmen, bir işlevi sahip olan dönüştürülmüş bir işlev işaretçisi (tabii, sürece, işlev gösterici değişkeni, bu durumda sonucu bir işaretçi bir işaretçi için bir fonksiyon; örneğin, sen-ebil eklemek için listesi void (**pp_foo)() = &p7_foo;).

Bu &&foo çalışmıyor neden: &foo bir fonksiyonu değildir; bir rvalue bir işlev işaretçisi. 29**, bu ifadelerin her ikisi de çünkü gibi ancak, &*&*&*&*&*&*foo çalışacak, & her zaman rvalue işlev işaretçisi bir işlev için uygulanmaz.

Not da ihtiyaç duymazsınız kullanmak için tekli * yap arama) işlevi işaretçi; (*p1_foo)(); (p1_foo)(); aynı sonuç, yine çünkü işlevi-fonksiyonu-işaretçi dönüşüm.

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Electro Posé

    Electro PosÃ

    21 ÅžUBAT 2013
  • HTC

    HTC

    12 Ocak 2006
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011