Changer la valeur de la variable avec un pointeur?
Je suis nouveau avec les pointeurs et je suis en train de créer une fonction qui modifie la valeur de la variable un variable b, et la valeur de la variable b variable un.
Je pense que j'ai tout à droite, à l'exception de la fonction. Dans la fonction, je suis en train de faire la valeur de pointeur un (*un) et l'affecter à la valeur du pointeur de la b a, et vice verca. Cependant, ma sortie est "une est désormais, y et b est désormais y".
Est-ce parce que quand j'assigne *un à b, b obtiendrez *un's la valeur qui vient de changer pour un y?
#include <stdio.h>
void change(char* a, char* b)
{
*a = b;
*b = a;
}
int main(void)
{
char a = 'x';
char b = 'y';
printf("a is now %c and b is now %c\n", a, b);
change(&a, &b);
printf("a is now %c and b is now %c\n", a, b);
return 0;
}
- lorsque vous faites : *a = b, on aura a = " y " puis *b = a, vous aurez b = 'y'
Vous devez vous connecter pour publier un commentaire.
Votre
change
fonction est faux:D'abord faire une variable temporaire - copie dans une variable temporaire, le swap de la valeur. Cette ligne est UB:
Vous essayez de stocker une valeur de pointeur dans un char.
temp
pour la copie. C'est comme cela n'allait pas fonctionner si vous ne mettez pas le nom de la variable 😀Oui, votre première affectation remplace la valeur de ce qui est nécessaire dans le second.
La solution est d'utiliser un stockage temporaire pour contenir l'une des valeurs de la variable au cours de l'échange:
Il y a aussi un truc que vous pouvez faire pour aller autour de ce (à l'aide de XOR au niveau du bit), mais ça fait peur, donc l'ignorer à ce point.