*y++
ve ++*y
arasındaki fark nedir?
C bir ifadenin anlamı iki şey ile karakterize edilir: ürettiği ve hangi yan etkileri ürettikleri değeri.
ilk ifadeyi inceleyelim.
Postfix'i artış çözümleyecek daha yüksek önceliğe sahip olan, bu nedenle bu *(y++)
olup.
sonek artışı bir yan etki üretir: farklı bir konuma işaret edecek y
değerini değiştirir. Postfix artışı da bir değer üretir: y
'un artırılmadan önce sahip olduğu değer. *
operatörü daha sonra, bir değer oluşturmak için bu değerden alıntılar yapar: yani, depolamak veya almak için bir değişken olarak kullanabileceğiniz bir şey.
Ben yan etkisi önce veya dereferencing sonra herhangi bir noktada olabilir unutmayın. Eğer
q = *y++
söyledi o zaman
++
yan etkisi herhangi bir noktada olabilirdi.
q = *y;
y = y + 1;
yoksa ikisi de tamamen yasal olan
t = y;
y = y + 1;
q = *t;
olarak tedavi edilebileceğini: Bu olabilir. (Tabii ki, eğer y
'un kendisi yan etkiler içeren bir ifade ise, bu yan etkiler sadece bir kez üretilmelidir. Açıklık için, bu varsayımı baştan sona yapacağım.)
++*y
nasıl? Bu doğrudur: *y
bir değişken üretir, değişkenin içeriği artar ve ifadenin değeri artırılmış değerdir.
q = ++*y
olarak tedavi edilebilir:
t = *y + 1;
*y = t;
q = t;
veya
t = *y + 1;
q = t;
*y = t;
Ol olarak, Cı etmediğini dışı amacıyla yine yan etki üretilebilir Not Yan etkileri meydana gelebilir hangi sırayla çok fazla kısıtlamalar üretmek, bu yüzden dikkatli olun.
'++ * y' ve' * ++ y' hakkında düşünün. –
Görüyorsunuz, işaretçilerle uğraşıyorsunuz ama bu yardımcı olabilir: http://stackoverflow.com/questions/1094872/is-there-a-difference-between-x-and-x-in-java – zztops
sadece * run * bu program çıktılarını buluyor mu? (Öncelikle tanımlanmamış bir davranışı düzeltmeniz durumunda ...) –