Bence çoğunlukla kendi sorunuzu cevapladınız. İfadenizde küçük bir değişiklik yapabilirim ve "geçici değişkeni" C. Gibbons'ın da bahsettiği gibi "rvalue" ile değiştirebilirim.
Değişken, bağımsız değişken, geçici değişken vb. Terimler, C'nin bellek modelini öğrendikçe daha net hale gelecektir (bu, güzel bir genel bakışa benziyor: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
"Rvalue" terimi yeni başladığınızda opak görünebilir, bu nedenle aşağıdakilerin bununla ilgili bir sezgi geliştirmenize yardımcı olacağını umuyorum.
Lvalue / rvalue, bir eşittir işaretinin (atama operatörü) farklı taraflarından bahsediyor: lvalue = sol taraf (küçük harf L, "bir" değil) rvalue = sağ taraf
C'nin hafızayı (ve kayıtları) nasıl kullandığı hakkında biraz bilgi edinmek, ayrımın neden önemli olduğunu anlamaya yardımcı olacaktır. Gelen geniş fırça darbeleriyle , derleyici bir ifadesi (rvalue) sonucunu hesaplamak makine dili talimatları listesini oluşturur ve ardından koyar o sonuç bir yere (lvalue). Aşağıdaki kod parçasıyla ilgilenen bir derleyici düşünün:
x = y * 3
Montaj pseudocode o olabilir bu oyuncak örneğe benzer:
load register A with the value at memory address y
load register B with a value of 3
multiply register A and B, saving the result in A
write register A to memory address x
++ operatörü (ve onun - karşılığı) değiştirmek için bir "bir yere" ihtiyaç duyar, esasen bir değer olarak çalışabilen herhangi bir şey.
C bellek modelini anlamak yardımcı olacaktır çünkü argümanların işlevlere nasıl aktarıldığı ve (sonunda) malloc () işlevi gibi dinamik bellek ayırma ile nasıl çalışılacağı hakkında kafanızda daha iyi bir fikir edineceksiniz. Benzer nedenlerle, derleyicinin ne yaptığı hakkında daha iyi bir fikir edinmek için bir noktada bazı basit montaj programlarını inceleyebilirsiniz. Ayrıca gcc kullanıyorsanız , -S seçeneği "Doğru derleme aşamasından sonra durdurun; birleştirmeyin." ilginç olabilir (yine de küçük bir kod parçası üzerinde denemenizi tavsiye ederim ).
Bir kenara olarak: ++ talimatı 1969'dan beri var (C'nin selefi B'de başlamasına rağmen):
(Ken Thompson'ın) gözlemi, ++ x'in çevirisinin x = x + 1'den daha küçük olduğuydu. "
Bu wikipedia referansının ardından, sizi Dennis Ritchie'nin C dilinin tarihi üzerine yazdığı ilginç bir yazıma ("K&R C" deki "R"), kolaylık sağlamak için buraya bağlantıya götürecektir: http://www.bell-labs.com/ usr / dmr / www / chist.html burada "++" için arama yapabilirsiniz.