Creo que en su mayoría respondiste a tu propia pregunta. Podría hacer un pequeño cambio en su fraseo y reemplazar "variable temporal" con "rvalue" como mencionó C.Gibbons.
Los términos variable, argumento, variable temporal, etc. se volverán más claros a medida que aprenda sobre el modelo de memoria de C (esto parece una buena descripción general: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
El término "rvalue" puede parecer opaco cuando recién está comenzando, así que espero que lo siguiente ayude a desarrollar una intuición al respecto.
Lvalue / rvalue se refieren a los diferentes lados de un signo igual (operador de asignación): lvalue = lado izquierdo (L minúscula, no "uno") rvalue = lado derecho
Aprender un poco sobre cómo C usa la memoria (y los registros) será útil para ver por qué la distinción es importante. Con pinceladas amplias , el compilador crea una lista de instrucciones en lenguaje de máquina que calculan el resultado de una expresión (el rvalue) y luego coloca ese resultado en algún lugar (el lvalue). Imagine un compilador que se ocupa del siguiente fragmento de código:
x = y * 3
En el pseudocódigo de ensamblaje, podría parecerse a este ejemplo de juguete:
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
El operador ++ (y su - contraparte) necesita un "lugar" para modificar, esencialmente cualquier cosa que pueda funcionar como un lvalue.
Comprender el modelo de memoria C será útil porque obtendrá una mejor idea en su cabeza sobre cómo se pasan los argumentos a las funciones y (eventualmente) cómo trabajar con la asignación de memoria dinámica, como la función malloc (). Por razones similares, podría estudiar alguna programación simple en ensamblador en algún momento para tener una mejor idea de lo que está haciendo el compilador. Además, si está utilizando gcc , la opción -S "Deténgase después de la etapa de compilación propiamente dicha; no ensamble". puede ser interesante (aunque recomiendo probarlo en un pequeño fragmento de código).
Solo como un aparte: la instrucción ++ ha existido desde 1969 (aunque comenzó en el predecesor de C, B):
La observación (de Ken Thompson) (fue) de que la traducción de ++ x era menor que la de x = x + 1 ".
Seguir esa referencia de wikipedia lo llevará a un artículo interesante de Dennis Ritchie (la "R" en "K&R C") sobre la historia del lenguaje C, vinculado aquí para su conveniencia: http://www.bell-labs.com/ usr / dmr / www / chist.html donde puede buscar "++".