Je pense que vous avez principalement répondu à votre propre question. Je pourrais faire un petit changement dans votre formulation et remplacer "variable temporaire" par "rvalue" comme mentionné par C.Gibbons.
Les termes variable, argument, variable temporaire et ainsi de suite deviendront plus clairs au fur et à mesure que vous en apprendrez sur le modèle de mémoire de C (cela ressemble à un bel aperçu: https://www.geeksforgeeks.org/memory-layout-of-c-program/ ).
Le terme «rvalue» peut sembler opaque lorsque vous débutez, donc j'espère que ce qui suit vous aidera à développer une intuition à ce sujet.
Lvalue / rvalue parlent des différents côtés d'un signe égal (opérateur d'affectation): lvalue = côté gauche (L minuscule, pas un "un") rvalue = côté droit
Apprendre un peu comment C utilise la mémoire (et les registres) sera utile pour voir pourquoi la distinction est importante. Dans de larges coups de pinceau , le compilateur crée une liste d'instructions en langage machine qui calculent le résultat d'une expression (la rvalue), puis place ce résultat quelque part (la lvalue). Imaginez un compilateur traitant le fragment de code suivant:
x = y * 3
Dans le pseudocode d'assemblage, cela pourrait ressembler à cet exemple de jouet:
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
L'opérateur ++ (et son équivalent -) a besoin d'un "quelque part" à modifier, essentiellement tout ce qui peut fonctionner comme une lvalue.
Comprendre le modèle de mémoire C sera utile car vous aurez une meilleure idée de la façon dont les arguments sont passés aux fonctions et (éventuellement) comment travailler avec l'allocation de mémoire dynamique, comme la fonction malloc (). Pour des raisons similaires, vous pouvez étudier une programmation d'assemblage simple à un moment donné pour avoir une meilleure idée de ce que fait le compilateur. De plus, si vous utilisez gcc , l' option -S "Arrêtez après l'étape de compilation proprement dite; ne pas assembler." peut être intéressant (même si je recommanderais de l'essayer sur un petit fragment de code).
En passant: l'instruction ++ existe depuis 1969 (bien qu'elle ait commencé dans le prédécesseur de C, B):
L'observation (de Ken Thompson) était que la traduction de ++ x était plus petite que celle de x = x + 1. "
Suite à cette référence wikipedia vous amènera à un article intéressant de Dennis Ritchie (le «R» dans «K&R C») sur l'histoire du langage C, lié ici pour plus de commodité: http://www.bell-labs.com/ usr / dmr / www / chist.html où vous pouvez rechercher "++".