différence entre pointeur et référence en c?
quelle est la différence entre pointeur , de référence et de déréférencement en c?
Je ne comprends pas la question. Il y a des pointeurs en C, et vous pouvez déréférencement, mais il n'y a pas de références. C'est un C++ chose.
avant C++ en cours de publication, il y avait des références à C. C les pointeurs sont une sorte de référence -- utilisation de l'unaire
avant C++ en cours de publication, il y avait des références à C. C les pointeurs sont une sorte de référence -- utilisation de l'unaire
*
opérateur n'est pas appelé "déréférencement" pour aucune raison. Une fois que C++ a été publié et utilisé le mot "référence" pour un autre type spécifique de référence, il est devenu plus difficile, puisque C n'est manifestement pas ceux.
OriginalL'auteur user615929 | 2011-02-14
Vous devez vous connecter pour publier un commentaire.
Voici une carte mémoire; une représentation de la mémoire comme une séquence de blocs:
Maintenant, nous supposons créer un personnage:
Autres supposons que
c
est stocké à l'adresse01
, de sorte que notre mémoire ressemble à ceci:Maintenant, nous allons créer un pointeur:
p
peut être stockée à l'adresse02
:Ici le pointeur
p
est à l'adresse02
et il points à l'adresse01
. C'est le sens dep = &c;
. Lorsque nous de déréférencement le pointeurp
(à l'adresse02
) nous attendons à ce que l'adresse pointée parp
. C'est,p
points à l'adresse01
, et ainsi de déréférencementp
moyens de recherche à l'intérieur d'adresse01
.Enfin, permet de créer une référence:
Ici la mémoire de mise en page ne change pas. Qui est, pas de mémoire est utilisée pour stocker
r
.r
est une sorte de alias pourc
, de sorte que lorsque nous nous référons àr
nous avons pratiquement reportez-vous àc
.r
etc
sont conceptuellement. Changerr
signifie changerc
, et de changerc
signifie changerr
.Lorsque vous créez une référence, vous devez initialiser, et une fois initialisé, vous ne pouvez pas re-initialiser avec une autre cible. C'est, au-dessus de la référence
r
moyens et jamais signifiec
.Également liées sont const références. Ce sont les mêmes comme une référence, sauf qu'elles sont immuables:
Nous utilisons const références lorsque nous sommes intéressés à la lecture des données, mais froncement de sourcils sur le changement. À l'aide d'un const référence au compilateur de ne pas copier les données, ce qui nous donne une performance idéale, mais aussi nous interdire de modifier les données, pour l'exactitude.
Dans un sens, on peut dire que les références sont une compilation fonction de l'heure, alors que les pointeurs sont une fonctionnalité d'exécution. Si les références sont plus rapides et moins chers que des pointeurs, mais avec certaines contraintes et implications. Comme les autres au moment de la compilation-vs-exécution des alternatives, nous avons parfois choisir l'un sur l'autre pour la performance, parfois pour l'analyse statique et parfois de souplesse.
la question posée sur le C langue en particulier, mais votre réponse a certains code C++ de concepts. char& r = c est un C++ chose
OriginalL'auteur wilhelmtell
Le temps d'aller sur un terme de dénigrement systématique de la spree, parce que ces choses toujours causer de la confusion.
Un pointeur est une adresse de mémoire dans son propre droit. Cue fantaisie diagramme de comment ça se passe dans la mémoire:
J'ai utilisé une beaucoup plus petite adresse taille juste pour des raisons de simplicité. Fondamentalement,
0x1111
est un pointeur car son contenu est l'adresse d'une autre valeur.Déréférencement signifie examiner la valeur de l'adresse de la valeur du pointeur. Une telle fantaisie langue peut être source de confusion; en gros, si je déréférencement de
0x1111
je regarde0x1112
et obtenir la valeur de cette adresse. Pourquoi? Parce que c'est vraiment utile et parce que l'assemblage permet d'en faire trop,Est msna/intel syntaxe pour "regarder en r8, trouver l'adresse mémoire, la suivre et de trouver la valeur à l'adresse mémoire et de mettre en rax".
Passage par valeur. Le passage par valeur signifie que lorsque vous créez une fonction cadre de la pile, qui est le contenu de la pile autour d'une fonction, vous copie chaque valeur est un argument partout où il va. Registres, pile, un peu partout. Bien sûr, si vous copiez une valeur de pointeur, vous êtes de la copie d'une adresse de mémoire et donc de la création d'un autre pointeur pointant vers la même mémoire. C'est la façon dont les fonctions comme ceci:
Travail.
Passage par référence. Ce que la fonction ci-dessus n'est essentiellement passer par référence à la sémantique comme vous le verrez dans dire C++. L'essentiel, sinon la seule différence que la mise en œuvre est probablement identique au niveau de l'assemblage est qu'une référence, c'est quelque chose que le compilateur C++ comprend. Puisque le compilateur est la langue c'est important. C comprendre les pointeurs et la manipulation de la mémoire, et ainsi de faire des compilateurs C, mais ils vont vous laisser faire ce que vous aimez. Vous ne pouvez pas re-affecter une référence, par exemple,
Donc, pour résumer, les références sont sur un seul niveau, une fonctionnalité du langage où le compilateur comprend où la source de mémoire et empêche la modification de la source adresse de la mémoire. Il comprend que vous voulez jouer avec la valeur. Les pointeurs ne sont que des adresses de la mémoire maintenant les autres adresses de la mémoire.
Wikipedia résume assez bien:
Oui, je l'ai mentionné C++ lorsque cette question est seulement en C, mais je pense qu'il est prudent de préciser la façon dont un terme est devenu un peu confus avec le plus de langues plus tard.
Je ne pense pas que je sais ce que je veux dire, je suis clairement bavarder non-sens avec cette déclaration. Les pointeurs sont une fonction de C et je crois x86 inclus pour bien travailler avec C. je pense. Ne me souviens pas où j'ai lu ça, mais je vais laisser ça de ma réponse, car il n'ajoute rien à cela de toute façon.
OriginalL'auteur
Il n'y a pas de référence explicite type en C comme en C++. N'importe où quelqu'un dit "de référence" dans le contexte du langage C, vous pouvez supposer que un pointeur.
Merci @Steve, c'est bon à savoir, mais je ne pense pas que l'OP a été demandé à ce sujet 🙂
et même je ne pense pas qu'il vaut la peine de mentionner que c'est aussi utilisé dans la norme C à dire un autre document dont le contenu est pertinent pour C et mentionné dans la norme (p. ex. "ISO 31-11:1992, Grandeurs et unités — Partie 11: les signes et symboles Mathématiques pour l'utilisation dans le domaine des sciences physiques et de la technologie."), et pour les mentions dans l'une clause de la pertinence de la clause ("forward de référence"). Je pense que vous avez raison que la question veut dire 🙂 C'est le seul inconvénient de l'utilisation de mots anglais pour signifier une programmation spécifique des entités, vous risquez d'ambiguïté avec le mot anglais...
OriginalL'auteur Nikolai Fetissov
C a des pointeurs et vous pouvez très bien faire ce que vous voulez avec ces pointeurs, vous pouvez déférence, et que vous modifiez la valeur d'un pointeur. En fait, l'arithmétique des pointeurs est assez technique courante dans la programmation en C. Dans ma jeunesse, en tant que programmeur C références n'était pas un terme couramment utilisé quand on parle avec les autres développeurs C.
Des références en terme est très souvent utilisé avec Java, C# et les Langages Orientés Objets. Dans le contexte de Java et les langages Orientés Objets, une référence est un pointeur vers une instance de l'objet en mémoire. Avec une référence vous ne pouvez pas faire de l'arithmétique des pointeurs, et c'est la principale différence entre les pointeurs et les références de mon point de vue.
Pointeurs permettent pour l'arithmétique des pointeurs et de déférence, les références permettent seulement de déférence et de changer ce que les points de référence.
OriginalL'auteur ams
Référencement signifie prendre l'adresse d'une variable existante (à l'aide de &) pour définir un pointeur de variable. Pour être valide, un pointeur doit être réglé à l'adresse d'une variable du même type que le pointeur, sans l'astérisque:
Déréférencement d'un pointeur désigne l'utilisation de l'opérateur * (astérisque) pour accéder à la valeur stockée à un pointeur: REMARQUE: La valeur stockée à l'adresse du pointeur de la souris doit être une valeur DU MÊME TYPE que le type de la variable pointeur "points", mais il n'est pas sûr que ce soit le cas, sauf si le pointeur a été correctement définie. Le type de la variable sur laquelle pointe le pointeur est le type moins ultrapériphériques astérisque.
Invalide déréférencement peut ou peut ne pas causer des plantages:
Tout un déréférencement de pointeur non initialisé peut provoquer une panne
Un déréférencement avec un type non valide plâtre ont le potentiel de causer un accident.
Un déréférencement d'un pointeur vers une variable qui a été allouée dynamiquement et a par la suite été effectuée peut provoquer une panne
Un déréférencement d'un pointeur vers une variable qui a depuis disparu hors de portée peut également provoquer un plantage.
Non valide le référencement est plus susceptible de causer des erreurs de compilation que les accidents, mais ce n'est pas une bonne idée de compter sur le compilateur pour cela.
Références:
http://www.codingunit.com/cplusplus-tutorial-pointers-reference-and-dereference-operators
http://www.cplusplus.com/doc/tutorial/pointers/
vous pouvez lire wiki
L'opérateur de déréférencement * est aussi appelé l'opérateur d'indirection.
Ce texte est tiré de ce lien qu'ils ont apporté la même réponse à la même question:
sens de "référencement" et "déréférencement"
vous pouvez le dire sans faire de -1 à la poste. Et j'ai changé comme tu le dit
Ce n'est pas le mien -1, Votre post est maintenant clair, je vous donne +1, de sorte que votre score sera de 0
OriginalL'auteur Habib Rehman
Une valeur de pointeur est une adresse mémoire.
Une référence est un pointeur avec une valeur (adresse mémoire) qui fait référence à l'élément souhaité.
Un déréférencement est une technique de saisir le contenu de la mémoire d'un pointeur de références.
Noter qu'une référence C++ est une chose différente de C de référence. Une référence C++ est une idée abstraite où C++ décide pour vous permettre d'utiliser la syntaxe de pointeur pour la plupart des appels, mais sera automatiquement "do the right thing" en passant un pointeur en cas de besoin.
OriginalL'auteur Edwin Buck
Pointeur est une adresse de certaines données, par exemple
int* a
.Ici
a
est vraiment juste l'adresse où un int valeur est stockée.Une référence, en revanche, est un autre nom pour une variable, un alias, par exemple
int a;
int &b = a
Ici
b
est juste un autre nom poura
:b++
a le même effet quea++
.int &b = a
est pas valide en C, comme l'OP mentionné.OriginalL'auteur grzkv
comme dans "C++...":
OriginalL'auteur 4pie0