0
votes

Problème avec deux pointeurs pointant au même endroit

J'ai un problème avec des pointeurs que je ne savais pas comment résoudre. Mon pointeur p pointe vers une certaine adresse en mémoire. Je veux pointer le pointeur q à la même adresse exacte. Après cela, je veux pointer le pointeur p à NULL. Le problème est qu'après que je fais cela, le pointeur q pointe vers NULL, mais je veux qu'il continue à pointer vers l'adresse initiale. Y a-t-il un moyen de faire cela? Voici un code simple de ce que je veux faire: xxx


3 commentaires

* p = null; -> p = null;


Je suppose que 5 réponses se concentrer exactement la même chose devrait suffire. :-)


Ne laissez pas la syntaxe comme int * p = null; et * p = 3; vous confondre. Dans une déclaration, il peut sembler que le * fait partie de la chose donnée une valeur, mais ce n'est pas le cas. Une déclaration est spéciale et seul l'objet nommé, p est donné une valeur, pas * p . Dans une affectation, l'ensemble de l'expression sur le côté gauche, * p in * p = 3 est donné une valeur. Ainsi, pour définir p sur null , vous voulez p = null; , pas * p = null; .


5 Réponses :


0
votes

* p = null; // pointeur "P" pointe sur NULL c'est mauvais, vous DÉRÉFERENGE P ET défini sur NULL VALEUR IT Références à.

Utiliser p = null .


0 commentaires

0
votes

Le problème est ici: * p = null; // pointeur "P" pointe sur null
Vous ne réinitialisez pas lorsque le pointeur indique, vous définissez la valeur à l'emplacement référencé.

juste un exemple: xxx


0 commentaires

1
votes

Dans votre code, P et Q pointe vers la même mémoire. Vous n'avez pas changé le pointeur sur un emplacement différent, mais écrasez la valeur pointée par P (qui est également pointée par Q) à NULL.

Cela devrait fonctionner. xxx


0 commentaires

0
votes

Le problème dans votre code est le suivant:

*q = 5
p = (nil)


0 commentaires

0
votes

* p = null; // pointeur "P" pointe sur null

Non, ça ne le fait pas. Votre pointeur et définissez le A sur la null converti en int (qui est généralement zéro)

si vous souhaitez définir p à null, vous devez p = null ;

si votre idée était d'avoir p référencer le q Pointeur Vous devez modifier le code à: xxx


6 commentaires

Re «non ce n'est pas»: oui ça fait. * p = null met null (converti en un int ) dans * p et p < / Code> Points sur * P , donc p est alors pointé vers null (converti en un int ). Les gens ne doivent pas utiliser la phrase "pointant vers null". Au contraire, il devrait être " p est un pointeur nul" ou " p points à nulle part / rien".


@Ericpostpischil non, ça ne le fait pas. Il pointe de la valeur entière. Cette valeur peut être convertie en null mais ce n'est plus nul. Considérant #define NULL (VOID *) 0 . Null n'est pas 0 et 0 n'est pas null


Pour enseigner, vous devez comprendre ce qui est dans l'esprit d'autres personnes. Il ne suffit pas d'écrire des déclarations techniquement vraies et d'attendre des étudiants de les comprendre quand ils n'ont pas encore les connaissances nécessaires pour les comprendre. Certains étudiants vont raisonner pour dire que "je mets null dans * p , donc maintenant p points sur null ." Le fait que null est converti en int pendant cette affectation (c'est pourquoi j'ai écrit " null (converti en int ) ") Ne peuvent pas les empêcher de penser cela. Donc, vous devez expliquer; Vous devez faire face à ce qui est dans leur esprit, pas seulement ce qui est dans la norme C.


Il suffit d'écrire des réponses qui rendent les déclarations techniquement vraies peuvent montrer vos connaissances, mais elles ne transmettent pas nécessairement que les connaissances aux étudiants ainsi que les réponses qui déterminent comment les élèves pensent et qui expliquent en fonction de cela. Les réponses ne doivent pas simplement simplement présenter une destination; Ils devraient diriger le questionneur de l'endroit où ils sont à la destination.


@EricpostPischil écrit techniquement des réponses ou des commentaires incorrects fait beaucoup plus de confusion. Mais comme je sais que c'est très peu probable ici d'admettre une propre erreur.


Je ne dis pas d'écrire des réponses incorrectes. Je dis à penser à ce qu'un élève pense que c'est faux, puis non seulement indiquer la bonne réponse, mais aussi leur expliquer ce qui est incorrect dans leur pensée et les aider à le réparer.