Question

Je sais que les pointeurs stockent l'adresse de la valeur qu'ils pointent, mais si vous affichez la valeur d'un pointeur directement à l'écran, vous obtenez un nombre hexadécimal. Si le nombre est exactement ce que les magasins de pointeur, puis en disant

pA = pB; //both are pointers

vous copiez l'adresse. Ensuite, aurait-il pas un plus grand frais généraux à l'utilisation des pointeurs lorsque vous travaillez avec les très petits articles comme ints et bools?

Était-ce utile?

La solution

Un pointeur est essentiellement juste un nombre. Il stocke l'adresse dans la RAM où les données. Le pointeur lui-même est assez petit (probablement la même taille que sur une int architectures 32 bits, 64 bits sur long).

Vous avez raison bien qu'un int * ne sauverait pas d'espace lorsque vous travaillez avec ints. Mais ce n'est pas le point (sans jeu de mots). Les pointeurs sont là pour que vous puissiez avoir références à des choses, non seulement utiliser les choses elles-mêmes.

Autres conseils

adresses mémoire.

Ce sont les emplacements en mémoire où d'autres choses est .

Les pointeurs sont généralement la taille de mot du processeur, de sorte qu'ils peuvent généralement être déplacés dans un cycle d'instruction unique. Bref, ils sont rapides.

Comme d'autres l'ont dit, un pointeur stocke une adresse mémoire qui est « juste un numéro », mais qui est une abstraction. En fonction de l'architecture du processeur, il peut être plus d'un numéro, par exemple une base et le décalage qui doit être ajouté à déréférencer le pointeur. Dans ce cas, les frais généraux est légèrement plus élevé que si l'adresse est un numéro unique.

Oui, il y a les frais généraux pour accéder à un int ou un bool via un rapport de pointeur directement, où le processeur peut mettre la variable dans un registre. Les pointeurs sont généralement utilisés lorsque la valeur de l'indirection l'emporte sur les frais généraux, à savoir traversant un tableau.

J'ai parle du temps frais généraux. Je ne sais pas si OP était plus d'espace ou de temps frais généraux concernés.

Le numéro fait référence à son adresse en mémoire. La taille d'un pointeur est généralement la taille native de l'architecture de l'ordinateur donc il n'y a pas de frais généraux supplémentaires par rapport à tout autre type primitif.

Sur certaines architectures, il y a une charge supplémentaire de pointeurs vers des personnages parce que l'architecture ne supporte que les mots d'adressage (32 bits ou valeurs 64 bits). Un pointeur sur un caractère est donc stockée sous la forme d'une adresse de mot et un décalage du caractère à l'intérieur de ce mot. De-référencement le pointeur implique la récupération du mot, puis déplacer et masquer sa valeur pour extraire le caractère.

Une adresse en mémoire. Points à quelque part! : -)

Permettez-moi de commencer par les bases. Tout d'abord, vous devez savoir quelle variable sont et comment ils sont utilisés.

Variables sont essentiellement des emplacements de mémoire (contenant généralement des valeurs) et nous utilisons un certain identifiant (noms de variables) pour faire référence à cet emplacement de mémoire et d'utiliser la valeur actuelle à cet endroit.

Pour comprendre mieux, supposons que nous voulons que les informations à partir de cellules de mémoire présentes à un emplacement par rapport à la variable actuelle. Peut-on utiliser l'identifiant pour extraire des informations à partir des cellules voisines? Non, parce que l'identifiant (nom de variable) ne donnera la valeur contenue dans cette cellule particulière.

Mais, en quelque sorte Si nous pouvons obtenir l'adresse mémoire à laquelle cette variable est présente, on peut facilement se déplacer vers les localités voisines et utiliser leurs informations aussi bien (à l'exécution).

est où les pointeurs entrent en jeu. Ils sont utilisés pour stocker l'emplacement de cette variable afin que nous puissions utiliser les informations d'adresse supplémentaires chaque fois que nécessaire.

Syntaxe:. Pour enregistrer l'adresse d'une variable, nous pouvons simplement utiliser l'opérateur (adresse de)

foo = &bar 

Ici foo stocke l'adresse de la barre variable.

Maintenant, si nous voulons connaître la valeur actuelle à cette adresse?

Pour cela, nous pouvons simplement utiliser l'opérateur * (déréférencement) .

value = *foo

Maintenant que nous devons stocker l'adresse d'une variable, nous aurons besoin de la mémoire de la même manière que nous avons besoin en cas d'une variable. Cela signifie que les pointeurs sont également stockés dans la mémoire de la même manière que d'autres variables, donc comme dans le cas des variables, on peut aussi mémoriser l'adresse d'un pointeur dans un autre pointeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top