SORU
16 NİSAN 2015, PERŞEMBE


Neden C bize bir değişkeni bildirirken değişkeni parantez içinde adını çevreleyen izin veriyor mu?

Örneğin bu gibi bir beyan:

int (x) = 0;

Ya da bu:

int (((x))) = 0;

Bunun üzerine benim kod parçası aşağıdaki biri için benzer bende de oldu çünkü tökezledi:

struct B
{
};

struct C
{
  C (B *) {}
  void f () {};
};

int main()
{
  B *y;
  C (y);
}

Belli ki bir şeyler yap o zaman hangi nesne C kendi yıkıcı yararlı inşa etmek istedim. Ne olursa, derleyici y tip C değişken bildirimi C (y); davranır ve böylece y yeniden tanımlanmasıyla ilgili bir hata yazdırır. İlginç olan şey ben C (static_cast<B*> (y)) gibi bir şey gibi C (y).f () olarak veya yazma amaçlı olarak derlenir. En iyi modern çözüm tabii ki kurucusunu çağırmak {} kullanmaktır.

Sonra düşündüm, mümkün int (x) = 0; int (((x))) = 0; gibi değişkenleri bildirmek için, ama hiç kimse aslında bu gibi tanımlamalar kullanarak gördüm. "En can sıkıcı ayrıştırma" ve işe yarar bir şey katmıyor?- şimdilik sadece dava azılı benzer oluşturur gördüğüm için böyle bir olasılık amacı bu konu çok ilgimi çekiyor

CEVAP
16 NİSAN 2015, PERŞEMBE


Gruplandırma.

Belirli bir örnek olarak, fonksiyon bu tür bir değişken olarak bildirebilirsiniz düşünün

int f(int);

Şimdi, nasıl böyle bir şey için bir işaretçi bildirmek istiyorsunuz?

int *f(int);

Hayır, işe yaramıyor! Bu fonksiyon int* iade olarak yorumlanır. Parantez içinde bunu doğru şekilde çözümleme yapmak için eklemek gerekir:

int (*f)(int);

Diziler: aynı şekilde

int *x[5];   // array of five int*
int (*x)[5]; // pointer to array of five int

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GOTO Conferences

    GOTO Confere

    3 EKİM 2011
  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006