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

  • Chanre Joubert

    Chanre Joube

    27 Temmuz 2012
  • Sergio Fernandez

    Sergio Ferna

    1 EKİM 2009
  • Stanislav Petrov

    Stanislav Pe

    7 ŞUBAT 2009