Une variable est une construction logique qui correspond à l'intention d'un algorithme, tandis qu'un emplacement mémoire est une construction physique qui décrit le fonctionnement d'un ordinateur. De manière générale, pour exécuter un programme, il existe un mappage (généré par le compilateur) entre la notion logique de variable et le stockage de l'ordinateur.
(Même en langage assembleur, nous avons une notion de variables (logiques) allant à l'algorithme et à l'intention, ainsi que des emplacements mémoire (physiques), bien qu'ils soient plus regroupés dans l'assembly.)
Une variable est un concept de niveau élevé (er). Une variable représente soit un inconnu (comme en mathématiques ou une tâche de programmation), soit un paramètre fictif pouvant être remplacé par une valeur (comme dans la programmation: paramètres).
Un emplacement de mémoire est un concept de bas niveau. Un emplacement de mémoire peut être utilisé pour stocker une valeur, parfois pour stocker la valeur d'une variable. Cependant, un registre de CPU est un autre moyen de stocker la valeur de certaines variables. Les registres de la CPU sont également des emplacements de stockage de bas niveau, mais ils ne sont pas des emplacements de mémoire car ils ne possèdent pas d’adresses, mais juste des noms.
Dans un certain sens, une variable est un mécanisme d'abstraction permettant d'exprimer l'intention du programme, tandis qu'un emplacement mémoire est une entité physique de l'environnement de traitement qui fournit le stockage et la récupération.
Question 003: Est-il vrai qu'un pointeur est stocké dans l'emplacement de mémoire 0x23452? Pourquoi?
Nous ne pouvons pas dire d'avance. Ce n’est pas parce qu’il existe une valeur qui fonctionnerait comme une adresse que cela pourrait être l’adresse, il pourrait s’agir de l’entier (décimal) 144466. Nous ne pouvons pas émettre d'hypothèses sur l'interprétation des valeurs simplement en fonction de la façon dont elles apparaissent numériquement.
Question 004: Est-il vrai qu'un pointeur est stocké dans l'emplacement de mémoire 0x23452? Pourquoi?
C'est en effet une question étrange. Ils s'attendent à des hypothèses basées sur les cases, cependant, notons que les adresses augmentent de 1 pour chaque case. Sur n'importe quel ordinateur moderne, cela signifierait que chaque boîte peut contenir un adressage sur un octet, qui est la norme depuis des décennies. Cependant, un octet ne contient que 8 bits et peut aller de 0 à 255 (pour les valeurs non signées); pourtant, ils affichent une valeur beaucoup plus grande stockée dans l'une de ces adresses, donc très suspecte. (Cela pourrait fonctionner s'il s'agissait d'une machine adressée à un mot, mais ce n'est pas ce qui est dit et, aujourd'hui, peu de machines le sont, bien que certaines machines éducatives le soient aussi.)
Sur la base des quatre cartes mémoire que je vous ai montrées à tous, je définirais les pointeurs d'une manière légèrement différente:
Un pointeur est un emplacement de mémoire dont la valeur est l'adresse de la mémoire d'un autre emplacement de mémoire.
Bien qu'il existe des situations où cette pensée est correcte, vous mélangez des métaphores ici. La notion de variable concerne l’algorithme et son objectif - il n’est pas nécessaire de supposer que toutes les variables ont des emplacements de mémoire. Certaines variables (notamment les tableaux) ont des emplacements de mémoire car ceux-ci prennent en charge l’adressage (alors que les registres de CPU ne peuvent être nommés que non indexés).
Pour l'exécution, il existe un mappage logique entre les variables et les instructions, les emplacements mémoire du processeur et les séquences d'instructions du processeur. Une variable dont la valeur ne change jamais (par exemple une constante) ne nécessite même pas nécessairement un emplacement de mémoire, car la valeur peut être reproduite à volonté (par exemple si nécessaire pour les séquences de code générées par le compilateur).
a
,0x23453
.nil
etc. les choses à l'intérieur sont les valeurs. Cela peut sembler évident pour vous, mais je ne serais pas à l'aise de donner des réponses décisives à ces questions sans voir comment ces domaines sont définis. Il n'y a vraiment aucun moyen de savoir sia
dans la seconde image est un caractère, une chaîne (si elles sont différentes) ou le nom d'une variable. Si c'est une chaîne, alors c'estnil
aussi une chaîne? Ou une valeur "nulle"?