8
votes

Pointeur vs variable, objectif-c

J'ai des difficultés à saisir des concepts. Reconnaissant de l'aide.

Disons que vous avez la pièce de code suivante: xxx

L'opérateur & donne l'adresse à une variable, dans ce cas l'entier compte . L'adresse est ensuite affectée au intPTR . Ma question est la suivante: pourquoi intptr = comptage; pas suffisant. Je sais que compteur est une variable et intptr est un pointeur, mais une variable ISnâta est également en référence à un endroit en mémoire?

Hans < / p>


0 commentaires

5 Réponses :


10
votes

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é.

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.


1 commentaires

Merci pour votre réponse. Je comprends maintenant la différence. Hans



1
votes

Une variable est un endroit en mémoire, tandis qu'un pointeur fait référence à un lieu en mémoire (et l'endroit qu'il fait référence peut changer au fil du temps).

Dans votre exemple, si vous avez dit intPTR = compte , 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 s'il fait référence à quelque chose peut être attribué à, et un rvalue sinon. Si le compilateur a fait le type de "devinant" que vous semblez suggérer, alors certains, mais pas tous expressions de type int (à 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.


0 commentaires

0
votes

Vous pouvez toujours faire intPTR = compter, mais cela n'atteindra pas ce que vous êtes confondu avec.

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.

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.


0 commentaires

0
votes

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: xxx

// est une méthode / fonction C utilisée pour lire des valeurs // (numériques ou caractères) de la ligne de commande. xxx

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 ..])

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à.

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.


0 commentaires

6
votes

Il est important de comprendre que les pointeurs ont en fait un type de données différent.

A int code> La variable conserve des valeurs entières. p>

A pointeur code> > La variable conserve des adresses de mémoire. P>

de sorte qu'il n'est donc pas correct d'attribuer une variable Int à une variable de pointeur (comme vous l'avez suggéré intptr = comptage; code>) p>

Je crois que l'utilisation d'un typedef code> pourrait vous aider à mieux comprendre la différence. P>

Voici un petit exemple: p>

n = 6
*p = 6


0 commentaires