Myślę, że głównie odpowiedziałeś na własne pytanie. Mogę dokonać niewielkiej zmiany w Twoim frazie i zastąpić „zmienną tymczasową” „wartością r”, jak wspomniał C.Gibbons.
Terminy zmienna, argument, zmienna tymczasowa i tak dalej staną się bardziej zrozumiałe, gdy dowiesz się o modelu pamięci C (wygląda to na ładne omówienie: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
Termin „wartość r” może wydawać się nieprzejrzysty, kiedy dopiero zaczynasz, więc mam nadzieję, że poniższe wskazówki pomogą rozwinąć intuicję na jego temat.
Lwartość / rwartość mówią o różnych stronach znaku równości (operator przypisania): lwartość = lewa strona (mała litera L, a nie „jedynka”) rwartość = prawa strona
Dowiedz się trochę o tym, jak C używa pamięci (i rejestrów), aby zrozumieć, dlaczego rozróżnienie jest ważne. W szerokich pociągnięciach pędzla kompilator tworzy listę instrukcji języka maszynowego, które obliczają wynik wyrażenia (wartość r), a następnie umieszcza ten wynik gdzieś (lwartość). Wyobraź sobie kompilator obsługujący następujący fragment kodu:
x = y * 3
W pseudokodzie asemblera może to wyglądać podobnie do tego przykładu zabawki:
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
Operator ++ (i jego odpowiednik) potrzebują „gdzieś” do zmodyfikowania, w zasadzie wszystkiego, co może działać jako lwartość.
Zrozumienie modelu pamięci C będzie pomocne, ponieważ uzyskasz lepsze wyobrażenie o tym, jak argumenty są przekazywane do funkcji i (ostatecznie) jak pracować z dynamiczną alokacją pamięci, taką jak funkcja malloc (). Z podobnych powodów możesz w pewnym momencie przestudiować proste programowanie w asemblerze, aby uzyskać lepsze pojęcie o tym, co robi kompilator. Również jeśli używasz gcc , opcja -S "Zatrzymaj po etapie właściwej kompilacji; nie asembluj". może być interesujący (choć polecam wypróbowanie go na małym fragmencie kodu).
Na marginesie: instrukcja ++ istnieje od 1969 roku (chociaż zaczęła się w poprzedniku C, B):
(Kena Thompsona) obserwacja (była), że tłumaczenie ++ x było mniejsze niż tłumaczenie x = x + 1. "
Po tym odnośniku wikipedii przejdziesz do interesującego artykułu Dennisa Ritchiego („R” w „K&R C”) na temat historii języka C, z linkiem tutaj dla wygody: http://www.bell-labs.com/ usr / dmr / www / chist.html, gdzie możesz wyszukać „++”.