Quelle est la différence entre un pointeur et un pointeur de variable?
Je sais que c'est très basique, mais il est un peu confus pour moi.
J'ai lu:
un pointeur est rien de plus qu'un adresse, et un pointeur de variable est juste une variable qui peut stocker une adresse.
Quand nous enregistrons l'adresse d'une variablei
dans le pointeur de variablep
, nous disons quep
points dei
.
int i, *p = &i;
p
points de i
.
Pour accéder à l'objet que d'un pointeur de points, nous utilisons la *
(indirection) de l'opérateur.
Si
p
est un pointeur puis*p
représente l'objet quip
actuellement des points.
Maintenant, je suis confus que ce que je devrais appeler p
-- pointeur ou pointeur de variable?
Supplémentaires: Est un pointeur, toujours la même, comme une adresse?
J'ai lu le premier lien avant de poser cette question :). Merci pour le deuxième lien.
Merci pour le lien wiki. D'expliquer la référence à une très belle manière.(en fait, il a été ma prochaine question si vous n'avez pas fourni ce lien 🙂 ).
Habituellement, il est une bonne idée (au moins en tant que débutant) pour séparer ces types de déclarations en plusieurs lignes. C'est
int i, *p = &i;
est équivalent à int i;
int *p = &i;
OriginalL'auteur haccks | 2013-07-14
Vous devez vous connecter pour publier un commentaire.
La différence entre une valeur de pointeur un pointeur est une variable qui se manifeste par:
Ici,
p2
est un pointeur de variable; il est un pointeur versint
. D'autre part, dans l'appel àswap_int()
, l'argument&v1
est une valeur de type pointeur, mais il n'est en aucun sens un pointeur de variable (dans l'appel de la fonction). Il est un pointeur vers une variable (et que cette variable estv1
), mais simplement d'écrire&v1
n'est pas la création d'un pointeur de variable. À l'intérieur de la fonction appelée, la valeur du pointeur&v1
est attribué à le pointeur de variablei1
, et la valeur de la variable du pointeurp2
est attribué à le pointeur de variablei2
, mais ce n'est pas la même chose que de dire&v1
est un pointeur de variable (car il n'est pas un pointeur de variable; il est tout simplement une valeur de pointeur).Toutefois, pour de nombreuses raisons, la distinction est floue. Les gens disaient '
p2
est un pointeur " et c'est assez vrai; il est un pointeur de variable, et sa valeur est une valeur de type pointeur, et*p2
est la valeur de l'objet quep2
points. Vous obtenez le même flou avec "v1
est unint
"; c'est en fait unint
variable et sa valeur est uneint
valeur.Tu veux dire pointeur de variable?
où "T" est un type. Et les "objets" sont utilisées pour les variables IIRC, mais vous pouvez vérifier l', actuel ou précédent, C standard (C11 et C99, respectivement), ils sont disponibles gratuitement sur Internet.
Je dirais que " oui: un pointeur valide est toujours l'adresse d'un objet ou d'une fonction; un pointeur null est pas valide, mais reconnaissable; d'autres pointeurs invalides sont dangereux à utiliser — même les lire sans déférence entre eux peuvent causer des problèmes sur certains (principalement mainframe) des systèmes.
Dans la section §5.1.2.3, certains non-normatif (exemple) le texte dit: la machine abstraite [doit] promouvoir la valeur de chaque variable à
int
taille, puis ajouter les deuxint
s et de tronquer la somme. Il y a quelques autres non-normatif des références à des variables dans la section 6 (la principale définition de la langue), mais le principal spiel parvient à éviter le terme de variable, sauf pour la longueur variable des tableaux et des listes d'arguments variable, ni de ce qui compte.OriginalL'auteur Jonathan Leffler
Nous allons remplacer le mot "pointeur" avec un type de données que l'on espère plus familier, comme un
int
:Ici 42 est un
int
valeur, etn
est une variable qui contient uneint
. Vous pourriez l'appelern
un "int
variable". Un entier est un nombre comme 42 ou -25315685, et unint
variable contient ces chiffres. Une fois que vous avez une variable vous pouvez attribuer des numéros différents. Rien de déroutant?Un pointeur est juste comme un int: un certain nombre. Il arrive à être un numéro qui identifie un emplacement de mémoire, et si quelque chose est stockée dans cet emplacement de la mémoire vous pouvez l'appeler une adresse. Comme un int, un pointeur peut être stockée dans une variable. Une variable qui stocke un pointeur qui pourrait être appelé un pointeur de variable.
Donc, quelle est la différence entre un pointeur et un pointeur de variable? Le premier est une valeur, comme un numéro, le deuxième stocke ces valeurs. Mais souvent, les gens se réfèrent à des variables par leurs valeurs, qu'ils magasin; les gens n'appellent pas
n
un "int
variable" mais justeint
, même si elle peut, à différents moments de stocker différentsint
s. Dans ce texte, je vais faire la même chose et parfois écrire pointeur quand je veux dire un pointeur de variable; j'espère que la distinction est claire.Est un pointeur toujours une adresse? C'est une question sur le sens du mot "adresse" plus qu'autre chose. Un pointeur est toujours une adresse dans le sens où il correspond à un emplacement de mémoire d'une manière ou d'une autre, c'est une "adresse" pour cet emplacement de la mémoire. Mais d'un autre côté, si l'emplacement de la mémoire n'est pas accessible pour le programme ou n'est pas quelque chose d'utile qui y sont stockées, est-il vraiment une "adresse" pour quoi que ce soit?
Nous allons maintenant étudier le code suivant:
La première ligne déclare un pointeur de variable appelée
p
. Les indicateurs qui peuvent être stockées dansp
sont des emplacements de mémoire pourint
de données; cela est important pour des raisons que nous verrons plus tard. Nous n'avons toujours pas donnerp
toute valeur, de sorte que le pointeur magasins est arbitraire. Il n'est certainement pas à stocker l'adresse de quelque chose d'utile; il peut même pointer sur une zone de la mémoire inaccessible pour ce programme.Dans la deuxième ligne, nous prendre l'adresse de la
n
variable avec la&
-opérateur et de l'attribuer àp
. Maintenantp
stocke l'adresse den
, l'emplacement mémoire où la valeur den
est stocké.Que pouvons-nous faire avec un pointeur? On peut lire et écrire dans l'emplacement de mémoire que le pointeur s'identifie. Pour ce faire, nous "déréférencer le pointeur avec la
*
-opérateur, puis(*p)
peut être utilisé comme vous pouvez l'utilisern
. Par exemple, vous pouvez écrire une nouvelle valeur dansn
:C'est à ce moment qu'il devient évident pourquoi nous avons besoin de connaître le type de données que
p
peut souligner: sinon, vous ne pouvez pas savoir ce que l'on pourrait attribuer à(*p)
.Une autre raison pourquoi il est important de connaître le type de données que
p
peut point est de l'arithmétique des pointeurs. Par exemplep+1
est un pointeur vers laint
stockées dans la mémoire juste aprèsn
; sip
est un pointeur vers une grande structure de donnéesp+1
serait un pointeur vers une structure de données de même type stockés juste après. Pour cela, le compilateur doit connaître la taille de ce que le pointeur pointe.Quelles pièces avez-vous trouvé difficile à suivre?
Votre enquête, le cadre est vraiment bon et il m'a aidé à comprendre quelques points positifs, mais il n'est pas spécifique à ma question; Est un pointeur toujours une adresse?
Eh bien, cela dépendra de ce qui est signifié par "adresse", mais je dirais que non. Imaginez que vous écrivez un programme pour un ordinateur moderne: le programme demande au système d'exploitation de la mémoire. La seule valide les adresses pour la mémoire de l'OS retourné, mais il ya beaucoup plus de valeurs que vous pouvez stocker dans un pointeur. Ou imaginez un système embarqué sans système d'exploitation. La seule adresses valides sont de la quantité de mémoire installée, qui est généralement une fraction du nombre de différentes valeurs de pointeur. Un pointeur n'est pas toujours une adresse valide.
OriginalL'auteur Joni
Le jeton
p
est un pointeur de variable, qui pointe vers une variablei
. On peut simplement appeler un pointeur.Une déclaration:
déclare
p
que l'identifiant d'uneint
type d'objet. Habituellement, c'est à dire de façon plus succincte que'p is a pointer to i'
.p
peut être utilisé pour se référer variable inti
après l'expressionp = &i
. Pour accéder à la valeur de la variablei
à l'aide du pointeur de lap
vous pouvez utiliser l'opérateur de déréférencement*
(par exemple*p
). Eti = 10;
équivalent à*p = 10;
.Aussi, de l'avis de l'expression
p = &i;
de lire l'adresse dei
j'ai utilisé&
esperluette opérateur a également appeléAddress of operand
.Un pointeur est une adresse logique (un identificateur par lequel une variable peut être référencé). La norme ne définit pas ce qu'est un pointeur est à l'intérieur et comment il fonctionne en interne.
Vous souhaitez lire: Quel est exactement un C pointeur de si pas une adresse de mémoire?
En outre, lire ceci: pour Comprendre le but de pointeurs.
Oui. Donnez-moi un instant , je vais à travers elle.
Jonathan explique bien. Encore une fois merci pour ce lien.
votre accueil, oui Jonathon est génial mec! J'ai lu beaucoup de ses réponses.
OriginalL'auteur Grijesh Chauhan
Les termes de pointeur et de pointeur de variable sont souvent utilisés comme des synonymes.
OriginalL'auteur junix
Une variable est un endroit pour stocker une valeur. En C, chaque fois que vous utilisez une variable dans un contexte qui a besoin d'une valeur, la valeur de la variable est récupéré, donc dire que "p" dans ce contexte, c'est la même chose que de dire "la valeur de la variable p":
OriginalL'auteur Vaughn Cato
pointeur: une variable dont la valeur est l'adresse d'une autre variable.
pointeur de variable: est celui qui contient l'adresse ou d'emplacement de mémoire où une autre variable, les données de la valeur, ou la fonction est de stocker.
OriginalL'auteur PhilectorIV