J'ai des difficultés à saisir des concepts. Reconnaissant de l'aide.
Disons que vous avez la pièce de code suivante: p> L'opérateur Hans < / p> p> & code> donne l'adresse à une variable, dans ce cas l'entier compte code>. L'adresse est ensuite affectée au intPTR code>. Ma question est la suivante: pourquoi intptr = comptage; code> pas suffisant. Je sais que compteur code> est une variable et intptr code> est un pointeur, mais une variable ISnâta est également en référence à un endroit en mémoire? P>
5 Réponses :
Compte fait référence à la valeur de la variable. Vous ne voulez pas affecter la valeur du nombre à IntPTR, vous souhaitez affecter l'adresse du compte. Ainsi, l'opérateur est utilisé. P>
Si vous faites IntPTR = Comptez, vous souhaitez désigner une adresse mémoire 10 dans ce cas, ce qui est sûr d'être dans la mémoire système, et non de votre mémoire d'application et que vous vous écrasiez. P>
Merci pour votre réponse. Je comprends maintenant la différence. Hans
Une variable Dans votre exemple, si vous avez dit intPTR = compte code>, il aurait toujours été évident ce que vous vouliez dire (et un compilateur pouvait éventuellement être écrit pour le deviner aussi). Cependant, cela conduirait à des incohérences dans le type de syntaxe que vous pourriez utiliser. La valeur d'une expression s'appelle un lvalue em> s'il fait référence à quelque chose peut être attribué à, et un rvalue em> sinon. Si le compilateur a fait le type de "devinant" que vous semblez suggérer, alors int code> (à savoir celles qui sont des lvalues) être automatiquement transformé en pointeurs. Il y a des cas où cela pourrait entraîner des messages d'erreur très confondants. P>
Vous pouvez toujours faire intPTR = compter, mais cela n'atteindra pas ce que vous êtes confondu avec. P>
Vous voudrez peut-être effectuer un point de pointeur à une adresse en mémoire et si par la grâce de Dieu, la valeur de Count est un emplacement d'adresse valide, vous ne pouvez pas également obtenir de défaut de segmentation. p>
Bien sûr, chaque variable fait référence à un endroit en mémoire, mais cela ne signifie pas que deux types différents entraîneront un comportement qui peut être supposé être basé sur des faits ci-dessus. Il existe une définition bien définie pour une variable int et un pointeur sur INT. P>
Dans certaines fonctions utilisées dans la programmation de C ou de l'objectif-C ou C ++, vous devez passer dans une "référence" à la valeur (en d'autres termes, un pointeur) comme paramètre, pas seulement une variable.
prise Cette pièce de code: p> // est une méthode / fonction C utilisée pour lire des valeurs
// (numériques ou caractères) de la ligne de commande. p> Si vous avez essayé la même chose, sans "&" (adresse de) que vous obtiendriez soit une compilation Erreur de temps, ou erreur d'exécution, (selon le système de votre travail sur Win / Linux / OSX comme chaque compilateur fera quelque chose de différent. [GCC, MINGW etc ..]) P> Variables Utilisez la mémoire, Et restez en mémoire jusqu'à ce que le programme soit terminé et que vous ne pouvez pas récupérer cette mémoire jusque-là. p> où comme un "pointeur" peut être libéré de la mémoire à l'aide de la méthode DealLoc pendant l'exécution de votre programme et que la mémoire est libérée lors de l'exécution de votre requéreur. P> P>
Il est important de comprendre que les pointeurs ont en fait un type de données différent.
A A de sorte qu'il n'est donc pas correct d'attribuer une variable Int à une variable de pointeur (comme vous l'avez suggéré Je crois que l'utilisation d'un Voici un petit exemple: p> int code> La variable conserve des valeurs entières. p> pointeur code> > La variable conserve des adresses de mémoire. P> intptr = comptage; code>) p> typedef code> pourrait vous aider à mieux comprendre la différence. P> n = 6
*p = 6