Я думаю, вы в основном ответили на свой вопрос. Я мог бы внести небольшое изменение в вашу формулировку и заменить «временную переменную» на «rvalue», как упомянул К. Гиббонс.
Термины переменная, аргумент, временная переменная и т. Д. Станут более понятными по мере того, как вы узнаете о модели памяти C (это выглядит как хороший обзор: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
Термин «rvalue» может показаться непонятным, когда вы только начинаете, поэтому я надеюсь, что следующее поможет вам развить интуицию по этому поводу.
Lvalue / rvalue говорят о разных сторонах знака равенства (оператор присваивания): lvalue = левая сторона (строчная L, а не «единица») rvalue = правая сторона
Немного узнав, как C использует память (и регистры), будет полезно понять, почему это различие важно. В общих чертах компилятор создает список инструкций машинного языка, которые вычисляют результат выражения (rvalue), а затем помещает этот результат куда-нибудь (lvalue). Представьте компилятор, имеющий дело со следующим фрагментом кода:
x = y * 3
В псевдокоде ассемблера это может выглядеть примерно так:
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
Оператору ++ (и его аналогу) требуется «где-то» для изменения, по существу все, что может работать как lvalue.
Понимание модели памяти C будет полезно, потому что вы получите лучшее представление о том, как аргументы передаются функциям и (в конечном итоге) как работать с динамическим распределением памяти, например с функцией malloc (). По тем же причинам вы можете в какой-то момент изучить простое программирование на ассемблере, чтобы лучше понять, что делает компилятор. Также, если вы используете gcc , опция -S «Остановить после стадии собственно компиляции; не собирать». может быть интересным (хотя я бы рекомендовал попробовать его на небольшом фрагменте кода).
Просто в сторону: инструкция ++ существует с 1969 года (хотя она началась в предшественнике C, B):
(Кен Томпсон) заметил, что перевод ++ x был меньше, чем перевод x = x + 1 ».
Следуя этой ссылке в Википедии, вы перейдете к интересной статье Денниса Ричи («R» в «K&R C») по истории языка C, ссылка на которую для удобства приведена здесь: http://www.bell-labs.com/ usr / dmr / www / chist.html, где вы можете искать "++".