SORU
29 Mart 2010, PAZARTESİ


C -- return x,y; Ne anlamı var?

Birkaç yıl için C ve C programlama yapıyorum ve şu anda Üniversitede bir ders alıyorum ve kitabımız bir örnek için bu gibi bir işlevi vardı şimdi

int foo(){
  int x=0;
  int y=20;
  return x,y; //y is always returned
}

Hiç böyle bir sözdizimi gördüm. Aslında, hiç , operatör parametre listeleri dışında kullanılan gördüm. Eğer y ama her zaman dönerse, ne anlamı var o zaman? Return ifadesi bu şekilde oluşturulması gereken bir durum var mı?

(Ayrıca, C için de geçerlidir, çünkü ben de etiketli, benim kitap özellikle C olmasına rağmen )

CEVAP
29 Mart 2010, PAZARTESİ


C FAQ göre:

Doğrusu, genel ifadede virgül operatörünün anlamı

e1 , e2

"bu ifadeyi e1, e2; ifadenin değeri e2. değeri açısından değerlendirmek. Bu nedenle, e1 daha iyi bir atama veya artırma veya azaltma veya bir işlev çağrısı ya da yan etkisi da dahil oldu, çünkü aksi takdirde iptal olacaktır değerini hesaplamak olacaktır.

Seninle aynı fikirdeyim yaninokta diye bir şey yokbu geçerli olduğunu göstermek için başka bir hatadır.

Eğer C veya C de değerler geri dönmek istersen struct x y üyeleri içeren oluşturmak, bu yapı yerine dönebilirsin:

struct point {int x; int y;};

Sonra bir tür tanımlayabilir ve yardımcı kolayca struct içinde hem değerler döndürmek için izin fonksiyonu

typedef struct point Point;

Point point(int xx, int yy){
  Point p;
  p.x = xx;
  p.y = yy;
  return p;
}

Ve sonra yardımcı işlevi kullanmak için orijinal kodu değiştirin:

Point foo(){
  int x=0;
  int y=20;
  return point(x,y); // x and y are both returned
}

Ve son olarak bunu deneyin:

Point p = foo();
printf("%d, %d\n", p.x, p.y);

Bu örnek, C ve C de derler . Olarak Mark aşağıda işaret etmektedir, C daha zarif bir çözüm sağlayabilen point yapı için bir kurucu tanımlayabilirsiniz.

< / ^ hr .

Bir yan not, birden çok değer doğrudan döndürmek için özelliği destekleyen Python gibi dillerde harika

def foo():
  x = 0
  y = 20
  return x,y # Returns a tuple containing both x and y

>>> foo()
(0, 20)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ayite Atiwoto (superjiffrey)

    Ayite Atiwot

    29 EYLÜL 2010
  • Juan Carlos Candela Bordera

    Juan Carlos

    4 Mart 2009
  • MrSuicideSheep

    MrSuicideShe

    9 NİSAN 2010